0
点赞
收藏
分享

微信扫一扫

C#串口编程 Dictionary作为人机语言转换的桥梁


  • .NET Framework : 4.7.2
  •        IDE : Visual Studio Community 2019
  •         OS : Windows 10 x64
  •     typesetting : Markdown

博文起因

  当初我学习Dictionary的时候,老师讲了很多属性、方法,关于怎么遍历、查找和初始化,但是迷惑于它的实际用处,整天初始化、创建和查找,解决一些在理想世界中才能出现的问题,很是没有动力。

应用背景

  在串口编程中,有几个参数必须需要配置,比如串口号、波特率,数据位等。为了工作的快捷,人们会提出将配置参数保存为一个文件,在下次程序启动时,自动提取出配置参数进行配置的需求。我是用的XML文件保存配置参数。

XML文件

<?xml version="1.0" encoding="utf-8"?>
<portConfigure>
    <PortName>COM4</PortName><!--???-->
    <BaudRate>115200</BaudRate><!--460800 256000 128000 115200 57600 38400 28800 19200 9600 4800 1200-->
    <DataBits>8</DataBits>   <!--8 7 6 5-->
    <StopBits>1</StopBits>   <!--1 1.5 2-->
    <Parity>None</Parity>    <!--None Odd Even Mark Space-->
</portConfigure>

思考

  问题出现了。PortName端口号、BaudRate波特率、DataBits数据位,直接读取XML中数据就可以交给C#进行赋值,但是StopBits停止位和Parity校验位在XML保存的数据是为了让人能够轻易看懂,然而直接将其交给C#进行赋值,程序就会报类型不匹配的错误。于是乎,作为桥梁的字典Dictionary就需要出现了。

  XML文件中的参数作为字典的键,赋值的时,通过键(人易识别的数据)找到对应的值(类型匹配的机器数据)进行赋值,就可以解决类型不匹配的问题了。

code

using System;
using System.Collections.Generic;
using System.Xml;
using System.IO.Ports;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("正在读取上次保存的配置参数");

            string xmlFileName = "portArgsFile.xml";
            XmlDocument xml = new XmlDocument();
            // 打开现有的一个xml文件
            xml.Load(xmlFileName);
            // 获得xml的根节点
            XmlElement portConfigure = xml.DocumentElement;

            // 参数字典
            var parityDictionary = new Dictionary<String, Parity>() {
                { "Even",Parity.Even},
                { "Mark",Parity.Mark},
                { "None",Parity.None},
                { "Odd",Parity.Odd},
                { "Space",Parity.Space}
            };

            var stopBitsDictionary = new Dictionary<String, StopBits>() {
                { "1",StopBits.One},
                { "1.5",StopBits.OnePointFive},
                { "2",StopBits.Two}
            };

            // 从xml文件中读取数据
            // 端口号
            string portName = portConfigure.SelectSingleNode("PortName").InnerText;
            // 波特率
            int baudRate = Convert.ToInt32(portConfigure.SelectSingleNode("BaudRate").InnerText);
            // 校验位
            Parity parity = parityDictionary[portConfigure.SelectSingleNode("Parity").InnerText];
            // 数据位
            int dataBits = Convert.ToInt32(portConfigure.SelectSingleNode("DataBits").InnerText);
            // 停止位
            StopBits stopBits = stopBitsDictionary[portConfigure.SelectSingleNode("StopBits").InnerText];

            // 参数配置成功后关闭xml文件,网上说这个操作归GC管了.
            Console.WriteLine("配置参数读取成功");

            Console.ReadKey();
        }
    }
}

result

正在读取上次保存的配置参数
配置参数读取成功

感想

  写应用经验方向的博文,是希望通过我的实践历程告诉新手:要好好学习基础知识,这些基础知识在未来的工作中是切实可用的,坚定信心,不要迷茫。加油!

resource

  • [文档] docs.microsoft.com/zh-cn/dotnet/csharp
  • [规范] github.com/dotnet/docs/tree/master/docs/standard/design-guidelines
  • [源码] referencesource.microsoft.com
  • [ IDE ] visualstudio.microsoft.com/zh-hans
  • [.NET Core] dotnet.github.io

感恩曾经帮助过 心少朴 的人。
C#优秀,值得学习。.NET Core具有跨平台的能力,值得关注。
Console,WinForm,WPF,ASP.NET,Azure WebJob,WCF,Unity3d,UWP可以适当地了解。
注:此文是自学笔记所生,质量中下等,故要三思而后行。新手到此,不可照搬,应先研究其理象数,待能变通之时,自然跳出深坑。

C#串口编程 Dictionary作为人机语言转换的桥梁_配置参数

举报

相关推荐

0 条评论