c#串口通讯类(基于C#实现串口通讯)
c#串口通讯类(基于C#实现串口通讯)
2024-10-05 07:31:05  作者:明知故犯  网址:https://m.xinb2b.cn/know/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-10-05比亚迪员工猝死出租屋中新网客户端北京11月19日电近日,“比亚迪员工猝死在出租屋”一事引发热议17日晚,事件有了后续,家属与企业协商一致:除退还公积金、社保等之外,企业一次性支付家属20万元猝死出租屋,不能认定工伤?若因。
  • 贾乃亮才是真正无人能比的好男人(贾乃亮从人人同情到)
  • 2024-10-05贾乃亮从人人同情到2017年12月29日,贾乃亮开着直播和粉丝聊天他笑嘻嘻地说着日常,宣传自己和老婆李小璐将在跨年夜上合体表演节目就在这个时候,有粉丝问:“亮哥,嫂子去哪里了”贾乃亮一怔,随即笑着说:“璐璐啊,她做头发。
  • 菠萝蜜肉太生了不甜怎么办(三个催熟妙招请查收)
  • 2024-10-05三个催熟妙招请查收自然放熟如果将菠萝蜜打开之后,发现果肉还没成熟,可以先用保鲜膜将菠萝蜜密封好,拿出一个纸箱,将其放在纸箱中,之后放置在阴凉干燥处,一般存放几天,果肉就会熟的水果催熟或者准备一些成熟的水果,例如香瓜、香。
  • 怎么样不去电影院也能看电影(除了买票进影院)
  • 2024-10-05除了买票进影院说起电影多数的童鞋都会想到霓虹动作…哦,不对,应该是美国好莱坞大片~虽说,近几年来国产电影高奏凯歌但是国外大片仍然占据了票房高地氮素,要说起现代电影的起源还要追溯到1824年由英国伦敦大学教授皮特·马。
  • 寄居蟹是哪里来的(什么是陆寄居蟹)
  • 2024-10-05什么是陆寄居蟹目前,陆寄居蟹广泛被人们当作宠物饲养,而海寄居蟹的经济价值尚有待开发陆寄居蟹英文学名:Coenobita/,俗称LandHermitCrab,是指生活在陆地上且直接呼吸空气的一类寄居蟹陆寄居蟹陆上呼吸。
  • 德芙巧克力为何叫此刻尽丝滑(德芙巧克力诞生的背后)
  • 2024-10-05德芙巧克力诞生的背后德芙是在巧克力品牌中非常知名的一个,他的产品广告总是会选择许多当红明星来代言人,拍摄广告视频广受年轻人的喜爱,这也是德芙在中国广受好评的原因之一,但其实很少有人知道,这样的大品牌德芙背后还有一个感人至。
  • 网购商品丢失怎么赔偿(59块9网购衣服竟获3倍赔偿)
  • 2024-10-0559块9网购衣服竟获3倍赔偿如果告诉你你买的衣服由于顾客投诉现商家要收回赔你购买金额的三倍假如一件衣服100三倍就是300你会不会心动呢?这不市民小周就遇上了天上掉馅饼的“好事”可结果呢?女子59.9网购衣服退货搭进3万多市民小。
  • 黄景瑜和迪丽热巴的吻戏花絮(黄景瑜迪丽热巴吻戏曝光)
  • 2024-10-05黄景瑜迪丽热巴吻戏曝光文/温青青近日,有媒体拍到了一组当红小花迪丽热巴在拍摄电视剧《爱情的高级定制》时,与男主角的饰演者黄景瑜亲密接吻的路透照照片中,迪丽热巴与黄景瑜似乎是穿着情侣款的黑色皮衣,两人互相搂着彼此,动情的热吻。
  • 南美小猴子解说ss8赛季(沐子老王开黑之旅)
  • 2024-10-05沐子老王开黑之旅提起企鹅电竞,可能很多小伙伴都很喜欢这个平台,这个平台虽然来说并不算数一数二的直播平台,但是在游戏方面的主播还是非常多的,而且整个平台里里外外也都非常的干净,经常看绝地求生直播的小伙伴相信一定都知道沐。
  • 吃鸡神器飞天挂有必要吗(出现在吃鸡战场)
  • 2024-10-05出现在吃鸡战场大事不好,绝地求生又出现新外挂了,这次火影四代目的成名绝技“飞雷神之术”都出现了!近日有网友在绝地求生游戏中遭遇了这个方法,被外挂者追踪到瞬移过来一顿疯狂扫射而死到底这个新外挂是什么呢?有没有破解的方。
  • 我的世界丛林遗迹有什么东西(这是什么神仙遗迹)
  • 2024-10-05这是什么神仙遗迹在我的世界地图当中,会产生很多的自然奇观和奇葩的地形然而,这些并不会只存在和都存在一个地图当中要想迅速的找到,就必须借助种子不过,《我的世界》当中种子高达42亿,找到一个心仪的种子并非易事但我的世界中。