LabVIEWwilliam hill官网
直播中

徐先生

11年用户 69经验值
擅长:嵌入式技术
私信 关注
[问答]

请教Labview与施耐德PLC通过modbus通讯问题

如题,目前期望通过网线接口,使用modbus模块读取施耐德PLC寄存器中的数据,有如下问题想请教:
1、是否可以使用DSC中的modbus模块中的以太网+RTU模式?
2、PLC寄存器地址为%MW50,%MW51,%MW70,%MW71,而labview的modbus模块中的约束变量地址均为6位,这4个PLC寄存器地址对应的6位modbus约束变量地址分别是什么?
3、是否完成硬件连接后,可直接使用约束变量进行读操作来读取寄存器数据?

回帖(9)

徐先生

2018-3-8 16:59:03
来人解答下,谢谢!
举报

leonzl

2018-3-12 11:11:27
施耐德PLC,premium/M340/M580等,可以考虑用一下两种方式,均通过MODBUS TCP/IP

1. 数据量不大,可以直接通过基本的MODBUS库实现,直接读取PLC地址,可能%MW1--->400001

2.数据量不少,或者字符串,浮点数,整数什么的都有,可以考虑DSC中的OPC读取,设置好OPC服务器,设置好要读取的变量,在程序中直接读取共享变量就可以。%MW1------400001

OPC服务器,施耐德自己也有,OFS SERVER, 不过建议使用DSC,更方便些
1 举报
  • 陈工: 您好,可以具体咨询您一些相关的问题么

周建远

2018-3-12 13:28:52
三楼正解,如果对数据的传输速度有要求,建议直接使用485转USB用串口通讯的方式读取,可以一次性读取同一个区域的多个寄存器数据,然后再把需要的数据截取出来,进行处理  电脑的CPU毕竟要不PLC的强大多了,计算在电脑上运行肯定要快很多  
施耐德通讯协议截取部分内容:
4xxxx 代表的是保持寄存器,既可以读也可以写: 03 功能码是读保持寄存器 06 16功能码写保持寄存器  3xxxx 代表的是输入寄存器,是只读寄存器: 04功能码读输入寄存器  协议规定保持寄存器可读写,输入寄存器只读。
例如,现在要读取40000到40014这15个寄存器的数据,数据类型一般为32位字符,占4个字节,也就是说总共读取的字节数应该为16*4 =64,功能码为03  假设PLC设备地址为01,我们需要用串口发送的命令就为:
0103 9C40 000E EB8A(16进制发送)  其中第一个字节01代表PLC的地址,第二个字节03代表功能码读取,第三第四个字节表示读取的寄存器起始地址40000转为16进制表示,第五第六个字节表示要读取的寄存器数量15转为16进制表示,第七第八个字节表示前面六个字节CRC校验码  这就是一个完整的命令,发送给PLC,如果通讯正常的花,PLC返回的数据应该是: 0103 4000 01 0002 0002。。。。+CRC校验码,合计65个字节,其中前两个字节为返回数据的帧头,第三个字节为数据长度的16进制表示,后面每四个字节为一个数据,直到最后两个字节为CRC校验码  中间的60个字节刚好为15组数据,对应的就是PLC中40000到40014这15个寄存器的数据,只需要再转换为10进制并且按照相应的倍率计算(这个就要看具体需求来了,有的数据是除以10,有的是除以100,也有的是1000等等)得到的结果就是你实际所需要的数据。
1 举报

周建远

2018-3-12 13:30:27
引用: zhouyezuishuai 发表于 2018-3-12 13:28
三楼正解,如果对数据的传输速度有要求,建议直接使用485转USB用串口通讯的方式读取,可以一次性读取同一个区域的多个寄存器数据,然后再把需要的数据截取出来,进行处理  电脑的CPU毕竟要不PLC的强大多了,计算在电脑上运行肯定要快很多  
施耐德通讯协议截取部分内容:
4xxxx 代表的是保持寄存器,既可以读也可以写: 03  ...

抱歉,中间有部分写错,读取的字节数应该是15*4=60
举报

更多回帖

发帖
×
20
完善资料,
赚取积分