台达PLC与单片机的通讯

发布于:2022-11-28 ⋅ 阅读:(342) ⋅ 点赞:(0)

        最近由于工作需要用PLC与单片机通讯,以此用PLC来控制单片机,使单片机作为一个IO扩展模块来使用。这是第一次尝试自己写代码来使两个器件通讯,故在此做一下笔记,顺便巩固一下在这个过程中所学到的知识。

        本次使用的PLC型号是台达的DVP26SE11T,通过基于RS485的MODBUS协议连接单片机,使用MODBUS的RTU模式,把PLC作为主机,单片机作为从机。

一、首先需要把PLC的通讯和单片机的通讯设置一致,本次实验中的单片机的通讯格式为:波特率 115200、奇偶校验无、数据位 8、停止位 1 ,所以PLC的通讯格式也应设成相同,以下是PLC的通讯设置代码

 M1002:开启正向 (RUN 的瞬间’On’) 脉冲

D1120:COM2 (RS-485) 通讯格式设定

M1120:COM2(RS-485)通讯格式保持用,设置后变更 D1120 无效

D1129:COM2(RS-485) RS-485 通讯逾时异常设置 (ms)

M1143:COM2(RS-485)的 ASCII/RTU 模式选择 (Off 时为 ASCII 模式 On 时为 RTU 模式)

M1161:8/16 位处理模式 (On = 8 处理模式)

其中D1120的设置:

根据PLC的手册,D1120 是本PLC设定485通讯口通讯格式的寄存器,设定格式如下图:

​根据单片机的通讯格式 :波特率 115200、奇偶校验无、数据位 8、停止位 1 ,b15~b1应该为0000 0000 1100 0001,转化为16进制即为00C1,故D1120设置为16#00C1。

二、之后是控制接发数据,本实验直接读取和发送多笔数据,所以只用到H03(读取多笔字符(Word)装置)和H10(多笔字符(Word)装置数据写入) 两个功能码。这里需要注意,PLC与单片机的功能码需要通用,如果对功能码的定义不一样,则不能准确的发送接收数据。

 代码如下:

其中的MODRW 功能:MODBUS 读写数据

 接收数据代码解析:

S1:单片机作为从站,通讯地址为0X01,所以PLC作为主机通讯地址也需要设置为0X01,所以S1设置为16#0001(H0001);

S2:要接收单片机的多个点位,用到功能码H03(读取多笔字符(Word)装置),所以S2设置为16#0003(H0003);

S3:本次实验用到的单片机有16个输入,根据单片机的MODBUS协议,读取16个输入点位的地址为0X00FF,所以S3设置为16#00FF(H00FF)

S:因为PLC自带设置了MODRW指令读取的数据的寄存器(D1296~D1311),D1296~D1311所以这个数据用不上,可以随意设置一个空寄存器;

     在 ASCII 或 RTU 模式,PLC COM2 会将传送出去的数据储存在 D1256~D1295,而且回传的 数据会被储存在 S 操作数开始连续的寄存器中,并且自动将转换后的 Hex 数值后储存 D1296~D1311

N:读取的数据长度为1

写入数据代码解析:

S1:单片机作为从站,通讯地址为0X01,所以PLC作为主机通讯地址也需要设置为0X01,所以S1设置为16#0001(H0001);

S2:要接收单片机的多个点位,用到功能码H10(多笔字符(Word)装置数据写入),所以S2设置为16#0010(H0010);

S3:本次实验用到的单片机有16个输出,根据单片机的MODBUS协议,写入16个输入点位的地址为0X00FF,所以S3设置为16#00FF(H00FF)

S:把D50作为写入的寄存器,在D50内设置数值,即可控制输入;

N:写入的数据长度为1

三、最后是处理接法数据

       处理发送数据

    把K4M2000赋值给D50,这样通过控制M2000~M2015的值即可控制单片机的16个输出。例如假设要使单片机的Y4,Y8,Y11,Y15的LED灯亮灯(有输出),那么M2000~M2015的值需要分别为0001 0001 0010 0010,则K4M2000的值为4386(十进制),那么D50为K4386(二进制0001 0001 0010 0010),这样就可在PLC程序中通过控制M2000~M2015来控制单片机的Y1~Y16了。

        处理接收数据

    将MODRW指令通过功能码读到存在D1296里的数据赋值给K4M3000,这样M3000~M3015即可以表示X1~X16的值。例如当D1296的值为8481(十进制),那么K4M3000为K8481,M3000~M3015的值分别为 0010 0001 0010 0001,表示单片机板上的X1~X16的值分别为0010 0001 0010 0001,说明这时单片机板的输入状态为X3, X8, X11, X16的LED灯亮(有输入),其他点的LED灯灭(无输入),这样就可以通过M3000~M3015的状态来判断X1~X16的状态了。

四、综上所述,用PLC控制单片机的输入输出,使其作为一个IO扩展模块来使用是可行的。

 总结:

1.使用MODBUS协议来通讯时,两个通讯元件之间的通讯格式需要设置成一样;

2.通过MODBUS协议使两元件通讯时,功能码的定义一定要一致。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到