信捷PLC通讯
信捷PLC通讯的傻瓜解释说明
1、最近看到大家在群里面反复的问PLC和变频器通讯问题,所以临时写了一个信捷PLC 的通讯解释,希望大家能看懂,如果看不懂,请看完100遍以后再到群里问我。(说明一下,我一次也没有做过信捷PLC和变频器通讯的程序,所以不要让我给出具体的程序)
下面分类简单说明:
1、地址域,填写你的PLC站号,要看你的PLC具体设置站号是多少而定,如果是多台PLC
通讯,站号不能重复,比如数据是02,代表是与站号2的PLC通讯,注意如果是00,代表所有的PLC,也就是不管站号多少全部包括。
2、功能码,就是执行什么操作,即Modbus-rtu协议中所定义的读写操作代码。比如,01
是:读线圈指令,02是:读输入线圈指令,05是写单个线圈指令,0F是:写多个线圈指令。
3、数据,就是具体的数据,包括好几种,不太固定,不过只要记住自己用的几种就行啦,
有时间再研究其他的。一般包括寄存器地址和数据内容。
比如地址为0000可以理解为,使用线圈的地址是M0,或者是M0开始。使用寄存器的地址是D0或者是D0开始。具体使用线圈还是寄存器要看功能码要求做什么。
接下来的数据即为往寄存器中读或者写的数据内容,有数据的个数和数据,具体几位要看数据的个数,比如线圈的个数小于等于8个,数据就只有一位就可以,如果线圈的个数大于8个小于等于16个数据位就需要两位。再多就需要3位或者以上,这就是数据位数不固定的原因。
4、接下来是校验码,16位的。这个暂时不用关心,信捷PLC软件已经帮忙搞定。
5、下面举例子说明,
PLC通电以后,执行COLW命令,也就是写单个线圈命令,功能码是05,后面的K3代表地址域是3,也就是站号为3,和站号设置为3的PLC通讯。接下来K5代表远程PLC数据地址是5,也就是对应接收命令PLC的位地址是M5,后面的M0是本地PLC的线圈地址,也就是发命令的PLC,意思是把发命令PLC的M0状态写到接收PLC的M5里面,注意这个规定不能使用常数,所以只能用PLC的位元件。最后的K2代表使用第二个通讯口,记住是发命令的PLC使用的通讯口。信捷的PLC串口2支持485,所以一般都是2。
下面的慢慢理解,按照MODBUS RTU协议,主PLC会发送一组数据
030500 0500 00DC 29
解释:03是站号,需要接收数据的PLC站号,
05是功能码,COLW命令的功能码,写单个线圈命令,也是协议规定好的,
00 05被写入PLC的线圈地址,因为是按照16位的地址写法,所以要写成0005,实际是对应的PLC地址是M5,
接下来是00 00,主PLC的地址M0里面的状态,用16位表示,呵呵,这里需要注意一下可不是PLC的地址啊,是状态,也就是说是M0里面的数据。00 00代表关断OFF状态,FF 00 代表导通ON状态,这也是协议已经规定好的,只能有这两种状态,其他的允许使用。
最后的DC 29,是校验码,PLC自己加上去的,不用你操心啦,具体怎么算出来的,网上有很多资料,不过还是等你你有时间再看吧,现在连命令都搞不懂,研究校验码浪费你的时间。
好了,连起来解释一下这个命令达到的效果是,把主PLC也就是发命令的PLC的中间继电器M0状态写到从PLC也就是接收命令的PLC的M5里面,这样从PLC也就是接收命令的PLC通过自己M5知道主PLC也就是发命令PLC的M0的状态。还可以进一步认为,如果把两个当做一个来看,就相当于PLC的一条命令LD M0 OUT M0
好了,到这里再延伸一下,我们把梯形图的M0改到X0,把M5换到Y5。这样能达到的效果相当于主PLC的X0动作,从PLC的Y5就会跟着动作,从而实现远程控制功能,如果把这个动作看成一个PLC,等效的梯形图如下,
下面看看主PLC的梯形图命令应该怎么写。
解释一下命令的意思,在主PLC通电以后,主PLC的M8000就会导通,就会接连不断的发送COLW指令,
COLW K3H4805 X0K2
指令的意思是:COLW写单线圈指令
K3 从PLC的站号
H4805从PLC的数据地址,就是Y5,当然用K18437也是一样的。
X0主PLC的数据地址(需要发送数据的地址)
K2主PLC发送数据使用的串口号,
这样在主PLC的串口2会发送一组数据,数据的内容如下
030548 0500 00 CB 89
意思是:03从PLC的站号
05执行的命令代号,也就是写单个线圈命令的代码,协议规定好的。
48 05从PLC的接收地址,也就是被写入PLC的线圈Y5(查手册厂家得到)
00 00主PLC的地址X0里面的状态,代表X0没有动作
CB 89校验码,PLC根据上面的数据自己算出来的,通讯协议规定的算法
下面再把X0接通,让他动作,然后在观察串口2数据的变化,得到如下的数据内容,030548 0500 00 CB 89
和上面的对比,看看有什么变化,
第一次,X0没有动作得到的数据:030548 0500 00 CB 89
第二次,X0动作以后得到的数据:030548 05FF 00 8A 79
呵呵,数据的内容变了,都有哪些变化?
00 00CB 89
FF 00 8A 79
00 00代表位地址的状态是关断状态
FF 00代表位地址的状态是导通状态
注意:位地址的状态也算是协议规定的,具体原因这里不作说明,自己查看相关资料。
CB 89校验码,前面的数据按照协议算出的校验码,
8A 79校验码,(前面的数据不相同,当然算出校验码也不相同啦)
到这里你应该理解的差不多吧,仔细琢磨一下,如果让你在外部监控一下通讯口,就应该知道PLC发的是什么命令啦,其他的命令还没有学,所以只能分析出这个命令的意思。看看下面监视串口的数据是什么意思。
03 0548 0000 00DB 88
03是发送给站号为3的PLC。
05是写单线圈命令,对应信捷PLC的命令式COLW
48 00写到接收PLC的地址是48 00,查表得知是行PLC的Y0
00 00写到接收PLC地址Y0的状态为关断,就是Y0不输出。
DB 88校验码,已经分析出这个数据的意思,校验码不管对不对了,(呵呵,我也管不了)怎么样,现在应该干什么?看不懂,从头再看一遍,看懂了,继续往下看。呵呵,写文章也和编程序一样,来个程序分支。问题又来了,出现中断情况,时间接近晚上12点了。
先写到这里,让大家先看看,有时间接着写,上面的错误也没有检查,先下载到qq群里面看看效果。
后面的内容预告:01读线圈指令,
02读输入线圈指令
03读出寄存器内容
04读输入寄存器指令
05写单个线圈指令(已写)
06写单个寄存器指令
10写多个寄存器指令
0F写多个先关指令
如何试验程序
校验码介绍,
MODBUS 具体介绍和一些特殊规定
电路硬件知识介绍
干扰与传输
其他协议介绍
协议之间如何转换
欢迎大家参与信捷PLC技术群的讨论
QQ群:16353693
我的QQ:男孩443059259