点击【 大 中 小 】,可以选择字体的大小,以便你阅读.
PLC与PC计算机通信
请问,我的PLC与PC计算机通信采用RS-232无协议通信方式(梯形图RS指令方式,可自定义通信协议),目前,PLC中串行通信程序已编出,听说PC机那块还要编程(用VB或VC++),才能最终实现通信,是不是类似自己编通信协议,究竟应该怎么弄,我不太清楚,望各位工控前辈指点一下!
以下是对《PLC与PC计算机通信》的回复:
匿名回复:
VB用MSCOMM控件或者用WIN32 API自己写。
匿名回复:
PC机的串口和PLC的串口一样,也需要对其编程才能实现数据的收发。看来PLC的通讯程序应该不是你自己编的,最多是依葫芦画瓢,因为你对串行通讯好象还没建立起基本的概念。:)
在你这个项目里面,上位机通讯程序的作用就是接收PLC送过来的数据,也可能还要向PLC发送数据。你所说的“无协议通讯”实际上真正的含义应该是“未采用业界现行的一些标准通讯协议 (比如Modbus协议),而是按自己定义协议编写程序”。
所谓“通讯协议”的概念说白了实际上就是对如下一些问题作出明确的约定:
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个温度值,我们把一些字母掺杂到数据中,所以新的数据格式定义如下:
(1)、3个温度值排列顺序为“ABC”
(2)、3个温度值的结尾加上字母“M”以便于把3个温度值隔开
(3)、每个温度值的格式与例1一样,仍然是4位整数,前两位表示十位与个位,后两位为小数
这样,PLC发来的数据格式就应该是“xxxxMxxxxMxxxxM”。假设A,B,C 3路温度当前为12.35℃,
20.21℃和45.12℃,则PLC发送的数据应为“1235M2021M4512M”
通讯协议变复杂了,PLC和上位机通讯程序的任务也就变复杂了。PLC发送数前先要把数据按协议所规定的格式组织好,而上位机接收到数据后先要按协议中所规定的格式把所需要的数据分离出来。
通过上面两个例子,大家对通讯协议这个东东的真正含义应该清楚了吧。所交换的数据越多,则通讯协议就越复杂。但不管是简单的协议也好还是复杂的协议也好,其根本的目的只有一个---就是把所需交换的数据的内容与格式描绘的清清楚楚。
如有问题欢迎和我继续讨论,若我的叙述中有不妥之处请大家指出,谢谢
匿名回复: