说起串口通信很多初学者可能跟我一样,起初感觉通信这东西是非常复杂,很害怕接近这东西,其实一步一步了解,代码一个模块一个模块的完成,最后发现实现过程非常Easy,接下来我们就一起探索一下。
1.啥是串口,我可以明确告诉你,我没干过硬件,我只知道串口是一根线,这线叫啥名字呢,有的叫RS232,有的叫RS485有兴趣的同学可以查一下,上位机的同学只需要知道这根线是用来通讯的就完事了,
串口通信都要用到以上2种线,一头接设备,还有一头接电脑,你要确保你电脑机箱上也要有RS232的口,如果没有那你就需要买一个RS232转USB的接线去连接你的电脑.然后去检查你的电脑设备上有没有显示出你的端口,具体操作鼠标右键你的电脑,属性>设备管理器>端口,看一看有没有可以使用的端口一般叫做com1,com2,com3......,如果发现有三角形警告图标,那你要注意是不是驱动没装,把驱动装一直下一步结束,用串口线把电脑和设备接好之后进行下一步。
2.设置串口线,
看一下这个设置,个人理(大家还是百度把这几个搞清楚,不用死机知道干啥用就OK)
波特率:听着这名字就感觉和速度有关,直接就当作数据传输速度的大小吧。
数据位:数据位是啥,一个数据多少位,5,6,7,8都行,看你下位机大佬指示他说多少是多少。
校验位:数据你丢过来,我咋知道有没有丢失,或者数据有没有错误,这个校验位就是干这活得,有奇,偶校验,想知道咋算的同学可以去百度查一下。
停止位:数据有开始就有结束,你的结束标识占几位这个要说清楚了,不然数据发不完了。
以上这些是你需要设置你串口的参数没啥难的,找你们上位机工程师问清楚然后你照着设置就行了;
C#提供了SerialPort控件,直接NEW一个设置就完事了,代码:
sp.PortName = cbbComList.SelectedItem.ToString(); sp.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString()); sp.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString()); sp.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString()); sp.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());
以上我们的设备和电脑通过串口通信就建立好了
3.串口的读和写
先说写:很简单sp.write(data,o,data.length),注意data是byte[],串口通信传输的都是一个一个字节,数据以字节数组的方式传输,所以为了方便打加都将2位16进制字符和byte[]相互转换以便阅读和读写,往后我会提供代码2种形式的互相转换。
在说读:
sp.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件
private void Com_DataReceived()
{
this.sleep(1000)
}
之后你需要新建一个方法来接受你的数据,sp.DataReceived用于和时间绑定,注意这个方法不在主线程上(如果想将数据显示到主界面需要使用到委托),而且只有串口有数据接受到就会触发这个事件,如果出发太快,会导致数据丢失或者程序抛错
,所以加上如图,等数据全部接受完在读取,
这时候数据读写都已经完成
4.解析数据
解析数据,一定要遵守下位机老司机的协议文档,不下位机老师傅的协议文档,数据读出来后,是2个BYTE一个值,4个BYTE一个值,是用ASCII还是Unicode编码都一定要按照协议进行解析,如果不会解析,就多多去请教下位机老师傅,他们都是很厉害的,跟你讲几次,就明白了。
5.写在最后,当初也是一头雾水开始低头写代码,除了一堆错,对代码理解也不深,不知道干啥用的,所以不懂的同学一定要多问,一定要和公司里面的老司机们把关系给搞好咯,不懂就请问他们,没事叫他们出去抽抽烟,吃吃饭什么的,保证你进步大大的快,(吸烟有害健康,我已经戒了一个月了)。以后会丢出一些实用的工具类给大家,第一次写这玩意,写的不好还请老司机们多多的指教,88~