信捷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

相关主题
相关文档
最新文档