c#串口通讯类(基于C#实现串口通讯)
c#串口通讯类(基于C#实现串口通讯)
2024-11-08 09:27:19  作者:明知故犯  网址:https://m.xinb2b.cn/sport/bbu283895.html

工控机通常都带有很多串口(10个),而且可以通过Moxa卡扩展串口. 但Moxa的串口和电脑自带的串口还是有点区别 C#里面没区别, 但之前VB6的MSComm控件有时就会有不一样的地方.

支持串口通讯的仪表,通常通讯指令分2种,一种是文本格式的,另一种是16进制格式的.文本格式的,比如说有些仪器,查版本号发 *IDN? 就会返回文本格式的结果,例如 XXX 8905,502-H19-1449,V1.38.02.18A2

16进制通讯的,比如青智的电流表,查询电流用的命令格式 01是仪表地址, 03是读取的命令.1000是寄存器开始地址,000A是读取长度, C10D是CRC校验码(多数使用CRC,也有仪器使用和校验的)

青智

还有一种仪器是自带MCU,就是一打开串口就自动上传数据给上位机, 这种就不需要命令了.只需要定时读取串口缓冲区的内容,按照报文的格式,分析出哪一段数据才是你需要的.

我常用的串口通讯工具有下面2个

在Github下载一个ComDBG的工具,这个是C#写的,可以自己根据代码扩展需要的功能,比如历史发送记录


另外可以用一个监控工具,串口监控精灵, 这个对于那些没有代码的exe(比如一些仪表自带有一些小软件), 我们直接监控某个串口的收发信息.就知道对应的命令是什么了.


我通常把串口通讯做成一个基类, 把打开/关闭串口,文本命令,16进制命令,CRC校验,和校验都写到基类了,方便调用


下面是部分方法的代码

public bool InitCom(int portNum,int BaudRate =9600)        {            //端口打开时无法设置“PortName”            if (!sp.IsOpen)                sp.PortName = "COM" + portNum.ToString();            else            {                if (sp.PortName != "COM" + portNum.ToString())                {sp.Close();sp.PortName = "COM" + portNum.ToString();                }            }            sp.BaudRate = BaudRate;//波特率            sp.Parity = Parity.None;//无奇偶校验位            sp.StopBits = StopBits.One;//两个停止位            sp.Handshake = Handshake.None;//控制协议            sp.WriteTimeout = 1000;             sp.ReceivedBytesThreshold = 1;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数            return true;        }

//把一串命令,默认是文本string命令, 也可能是十六进制的数(空格分开),发到串口        protected bool SerialPortCmd(string command,ref string recvMsg,             int iDelay = 100, int RecvMsgLenParm= 2,bool IsCmdText =true)        {            DelaySec = iDelay;            RecvMsgLen = RecvMsgLenParm;             if (!openCom())                return false;            try            {                byte[] bytes;                if (IsCmdText)bytes = Encoding.Default.GetBytes(command);                elsebytes = HexStringToBytes(command);                sp.Write(bytes, 0, bytes.Length);            }            catch (Exception ex)            {                Debug.Write(ex.ToString());                return false;   //write failed            }            return DataReceived(IsCmdText, ref recvMsg);   }

private bool DataReceived(bool IsResultText,ref string result)        {            //Thread Safety explain in MSDN:            // Any public static (Shared in Visual Basic) members of this type are thread safe.             // Any instance members are not guaranteed to be thread safe.            // So, we need to synchronize I/O            lock (thisLock)            {                string RecvMsgBuffer;                int len = sp.BytesToRead;      if (len >= RecvMsgLen) //返回长度足够了.                {Byte[] data = new Byte[len];try{    sp.Read(data, 0, len);}catch (Exception ex){    throw ex;}if (IsResultText)    RecvMsgBuffer = Encoding.Default.GetString(data);else    RecvMsgBuffer = BytesToHexString(data);  result = RecvMsgBuffer;return true;                }                elsereturn false;            }        }

  • 科学教案大班溶解的秘密(小班科学优秀教案探究溶解现象含反思)
  • 2024-11-08小班科学优秀教案探究溶解现象含反思小班科学优秀教案《探究溶解现象》含反思适用于小班的科学主题教学活动当中,让幼儿能仔细观察并发现溶解现象的特征,并能用简单的语进行表达,体验与同伴一起探索的乐趣,初步了解物质的溶解现象,快来看看幼儿园小。
  • 漳州火山岛一定要去的地方(感觉整个沙滩都是我们的)
  • 2024-11-08感觉整个沙滩都是我们的作者:skystacey交通:真的是用了4种交通工具才到的这里,确实很偏僻!福州至厦门北动车——BRT至轮渡码头——搭船至漳州港——班车至景区(到了漳州港,旁边就有一个车站,有车直接到火山岛,大约要1。
  • 吸引来交流经验的文案(秒杀文案第三招)
  • 2024-11-08秒杀文案第三招先看下面的叙述文字遥闻深巷中犬吠,便有妇人惊觉欠伸,其夫呓语既而儿醒,大啼夫亦醒妇抚儿乳,儿含乳啼,妇拍而呜之又一大儿醒,絮絮不止当是时,妇手拍儿声,口中呜声,儿含乳啼声,大儿初醒声,夫叱大儿声,一时。
  • 流量加油包怎么开(以下6个步骤教你解决)
  • 2024-11-08以下6个步骤教你解决打开官方的营业厅App,以上海移动为例在界面上找到类似“流量加油站”的选项,没有看到它,可以在搜索框中输入“流量加油站”搜索它有流量安心包的,可以申请一个没有看到它,可以在搜索框中输入“流量安心包”搜。
  • 官场电视剧有哪些(讲官场的电视剧推荐)
  • 2024-11-08讲官场的电视剧推荐《人民的民义》:堪称内地反腐电视的旗舰《岁月》:深刻描写了官场的规则和人性的本质,号称公务员必读《潜伏》:内地谍战第一剧《悬崖》:也是一部谍战剧与《潜伏》相比,剧中的头号反派高科长,擅长权术,生性多疑。
  • 存在即合理下半句(存在即合理下半句是什么)
  • 2024-11-08存在即合理下半句是什么“存在即合理”的下一句是“合理即存在”存在即合理是客观唯心主义的理论,意思是凡是合乎理性的东西都是现实的;凡是现实的东西都是合乎理性的出自黑格尔《法哲学原理》序“存在即合理”的下一句是“合理即存在”黑。
  • 化过妆之后还怎么补涂防晒(妆后要不要补涂防晒)
  • 2024-11-08妆后要不要补涂防晒文/蔚小暖大家好呀,小暖最近收到一些小可爱们的疑问中,问最多的是:防晒要不要补涂啊?我化妆了怎么涂啊?嗯,夏季这个问题确实非常重要,毕竟不小心就会出汗,不小心就要接触到水,所以今天这一篇文,小暖就准备。
  • 民国四大家族及财产(民国时期四大家族有多少钱)
  • 2024-11-08民国时期四大家族有多少钱连联邦调查局和杜鲁门总统都不知道四大家族多有钱简直对四大家族的财力一无所知接着,联邦调查局发现孔宋在美国的流动资产有很大一部分是分别存在纽约的中国银行和旧金山的广东银行里这两家银行分别由孔宋所控制,联。
  • 蓝屏代码大全及图解(蓝屏常见代码及解决方案)
  • 2024-11-08蓝屏常见代码及解决方案很多问题都会导致蓝屏的,需要通过蓝屏代码来判断问题原因,建议你记录下蓝屏时的代码来帮你判断这里列举几个典型的蓝屏故障的原因和解决办法一、0X0000000A这个蓝屏代码和硬件无关,是驱动和软件有冲突造。
  • 我的父亲母亲剧情简介(电视剧我的父亲母亲剧情简介)
  • 2024-11-08电视剧我的父亲母亲剧情简介母亲乳名招娣(章子怡饰),年轻时是远近闻名的美人,不仅心灵手巧,而且勇敢地成为十里八乡第一个自由恋爱的女孩,她暗恋上骆玉生(孙红雷饰)的父亲骆长余(郑昊饰),一个淳朴幽默的青年教师她以家传的青花大碗为。