串口通讯

来源:互联网 发布:中国网络电视台纪实台 编辑:程序博客网 时间:2024/04/30 11:14

一、通讯原理

可以简单的把通信看成一个小桶,发送方住水桶里装水,接收方从水桶中取水。如果你要和对方通信首先需要将桶盖打开,再将水装入到桶中,这时接收方才能够从桶中取到水。这里就存在着一定的问题,1,如果桶盖还没有打开,发送方已经发送了。这时接收方再从桶中取水,肯定取的水不对,会不一部分缺失了。解决方式就是让桶盖打开再往其中加水。2,但是桶盖何时打开,发送方何时发送,这个不好把握。解决方法:接收方接到数据时,要返回一个应答标志,告诉发送方我已经取到数据了,而且是取得到正确数据才应答,否则不理会,继续取数据。或者一直查询,直到与发送方发来的数据一致再停止取数据。

  一般的,进行串口通信总有一个是主动方一个是被动方,而且二者传输数据时,会有一定的协商好的数据格式,二者发送接收都按照此数据格式进行。


二、编程流程:

1.选择串口号ComPort属性

2.串口属性设置InputMde,Setting属性,输入输出Buffer

3.打开串口PortOpen属性

4.设置触发发送RThreshold

5.清空缓冲区InputLen的Input属性


三、通讯协议

所谓“通讯协议”的概念说白了实际上就是对如下一些问题作出明确的约定:
  

1.上位机于下位机之间需要交换哪些数据

2.按什么格式发送这些数据

例1:某项目中,PLC需要每隔1秒钟把一个温度测量值送往上位机, 上位机不需要向PLC返回任何信息。
  

分析:这是个最简单的通讯协议的例子,发送对象只有一个,所以我们在通讯协议中只需把这么几条说清楚就可以:
 

1.所发送数据的含义
  

比如你PLC发来一串字符“1234”,作为上位机首先需要知道的当然是“PLC送来的这个数值是什么数据”。在我们这个例子中,很简单,就是所测的温度值。
  

2.数据发送的格式
  

明确了数据的含义,那么下面需定义的就是数据的格式了。所谓数据格式,说句大白话就是你PLC发来的“1234”这个数据,是不是就代表当前温度就是1234℃,如果不是,那么我上位机还需再作什么样的处理后才能得到当前真正的温度。我们假设在这个例子中,PLC发送的温度值为4位数,前两位代表温度值的“十位”和“个位”,后两位代表小数点后1位和后两位,即发送来的数值“1234”并不是代表当前温度为1234℃,上位机还需把这个数值再乘以0.01才是当前真正的温度.
  

这样,一个最简单的协议就完成了。协议写好了,那么PLC和上位机各自通讯程序的任务也就清楚了吧。 PLC的任务就是把温度值按4位整数的格式发往上位机,而上位机的任务呢,就是接收这些数据,并把收到的数据再乘以0.01,得出实际的温度值。
 
 

例2:在例1的基础上,我们再作些变化,原先是只采集一个数据,现在增加为采集A,B,C 3路温度值,依 旧是每隔1秒钟把数据上传一次,上位机不返回任何信息。
 

分析:由于1次要发送3个温度值,所以例1中的“纯数字格式”无法再使用,必须修改协议。
  

1.数据含义:3个温度值
  

2.数据格式
  

为能正确区分去3个温度值,我们把一些字母掺杂到数据中,所以新的数据格式定义如下:

  • 3个温度值排列顺序为“ABC”
      
  • 3个温度值的结尾加上字母“M”以便于把3个温度值隔开
      
  • 每个温度值的格式与例1一样,仍然是4位整数,前两位表示十位与个位,后两位为小数
      

这样,PLC发来的数据格式就应该是“xxxxMxxxxMxxxxM”。假设A,B,C 3路温度当前为12.35℃,20.21℃和45.12℃,则PLC发送的数据应为“1235M2021M4512M”
  

通讯协议变复杂了,PLC和上位机通讯程序的任务也就变复杂了。PLC发送数前先要把数据按协议所规定的格式组织好,而上位机接收到数据后先要按协议中所规定的格式把所需要的数据分离出来。
  
 

通过上面两个例子,大家对通讯协议这个东东的真正含义应该清楚了吧。所交换的数据越多,则通讯协议就越复杂。但不管是简单的协议也好还是复杂的协议也好,其根本的目的只有一个---就是把所需交换的数据的内容与格式描绘的清清楚楚。

0 0
原创粉丝点击