首页 上一页 1 2 3 4 下一页 尾页

cp1e的MODBUS-RTU简易主站通讯 点击:9557 | 回复:64



winter938

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 12:00:07
楼主

以下是针对cp1e-n20dr-a 而言的

PLC提供了A640.00,A640.01,A640.02三个内部寄存器对通讯进行监控

A640.01:MODBUS_RTU主站执行错误标志

A640.02:MODBUS_RTU主站执行正常标志

通讯正在执行时这两个标志均为OFF

A640.00:MODBUS_RTU主站通讯执行控制位  通过用户程序SET命令置ON,清除接收缓冲区D1250-D1259,启动MODBUS_RTU主站命令数据发出并等待从站响应,此时维持ON状态,在接收到响应(不管正确与否)或接收超时后该位自动置OFF,在接收缓冲区中会有从站响应回来的数据(未接收到响应时D1252的数据为HEX:0080表示响应超时,其他数据缓冲区维持0态),用户程序勿对其置OFF。


明白了以上过程,通过在发送缓冲区D1200-D1249预置MODBUS命令帧数据,并根据A640.00的状态进行监控即可实现MODBUS主站的通讯。发送,接收缓冲区的数据和MODBUS_RTU协议密切相关可参考PLC的软件手册和MODBUS_RTU协议去理解,如感兴趣的人多的话我会后续跟帖稍作说明。




winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 12:28:53
1楼

举个读03从站输入寄存器的例子来说明发送,接收缓冲区的数据

读4个从地址0(MODBUS定义的地址是30001)开始的输入寄存器,根据MODBUS_RTU协议主站发出的命令是:从站地址、功能码、起始地址高字节、起始址低字节、欲读输入寄存器个数高字节、欲读输入寄存器个数低字节、CRC校验码    

也就是这么一串数据:03 、04、00、00、00、04、F0 2B

它存放在CP1E的发送缓冲区是这样的:D1200:0003 从站地址

                                  D1201:0004 功能码

                                  D1202:0004 与D1200,1201定义的MODBUS通讯命令相关的还有4个字节的数据参与定义,即后续的D1203,1204

                                  D1203:0000 起始地址

                                  D1204:0004 要读出的输入寄存器个数

CRC校验码是PLC根据前面的数据自动计算出来的

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 13:02:22
2楼

再举个写01从站从地址1(MODBUS定义的地址是40002)开始的2个保持寄存器的例子,写入数据为0001,0258


它的MODBUS_RTU命令帧是:从站地址、功能码、起始地址高字节、起始字节低字节、欲写入保持寄存器个数高字节、欲写入保持寄存器个数低字节、欲写入字节数、欲写入数据(根据欲写入字节数多少而变化)、CRC校验码

也就是这么一串数据:01、10 、00 、01 、00 、02 、04 、(00 、01 、02 、58 )、63 39


对应到PLC的是D1200: 0001 从站地址

             D1201: 0010 功能码16写多个保持寄存器

             D1202: 0009 即D1203开始的后续9个字节参与定义该通讯命令

             D1203: 0001 起始地址(对应的是保持寄存器40002)

             D1204: 0002 要写入的保持寄存器个数

             D1205: 04///00     04 4个字节///00 保持寄存器40002高字节

             D1206: 01///02     01 保持寄存器40002低字节///02 保持寄存器40003高字节

             D1207: 58///XX     58 保持寄存器40003低字节///可为任意数据

CRC校验码是PLC根据前面的数据自动计算出来的

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 16:17:10
3楼

按照1楼数据主站发出的命令,03号从站在正常通讯时会响应回30001-30004 4个输入寄存器的数据8个字节


根据MODBUS_RTU协议响应的数据帧是:从站地址、功能码、读出的数据字节个数、数据、CRC校验码


也就是这么一串数据:03 、04 、08 、AA 、aa 、BB 、bb 、CC 、cc 、DD 、dd 、CRC校验码


对应到PLC的接收缓冲区D1250-1299则D1250: 0003 从站地址

                                 D1251: 0004 功能码04读输入寄存器

                                 D1252:错误码,具体参见后述

                                 D1253:0009 即D1254开始的后续9个字节提供读响应的信息数据

                                 D1254:08///AA 08 响应字节数///AA 输入寄存器30001高字节

                                 D1255: aa///BB aa 输入寄存器30001低字节///BB 输入寄存器30002高字节

                                 D1256: bb///CC bb 输入寄存器30002低字节///CC 输入寄存器30003高字节

                                 D1257:cc///DD cc 输入寄存器30003低字节///DD 输入寄存器30004高字节

                                 D1258:dd///00 dd 输入寄存器30004低字节///发送命令时被清0

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 16:31:31
4楼

D1252错误码定义:

00正常完成响应  01无效地址  02无效功能码 03数据字节数太长(大于94字节)  04串行通讯模式错误

80响应超时      81校验错误  82帧错误     83超限错误                      84CRC错

85确认地址有误  86确认功能有误87响应过长 88例外响应 89服务进行中

8A取消执行      8F其他错误

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-09 16:37:48
5楼

下面贴个CP1E操作手册的图片

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-02-12 18:10:06
6楼

如此干货竟然没人关注?自己顶一下,呵呵

guaoshashou

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 156回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2014年11月23日
发表于:2015-03-03 23:23:53
7楼


引用 winter938 的回复内容: 如此干货竟然没人关注?自己顶一下,呵呵

帮你顶一下,用心了

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:66帖 | 944回
  • 年度积分:2
  • 历史总积分:3399
  • 注册:2005年6月12日
发表于:2015-03-06 16:17:00
8楼

此贴中关于命令和接收用D区中的数据定义比较系统手册中进行了更直接的说明,实际应用中其他MODBUS命令可参照此对D区数据进行组织和识别。

lusihao007

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2015年3月17日
发表于:2015-03-17 17:25:46
9楼

好帖子,赞一个,同时表示感谢,特意注册的号码来点赞

驴一下

  • 精华:0帖
  • 求助:3帖
  • 帖子:5帖 | 15回
  • 年度积分:1
  • 历史总积分:0
  • 注册:2014年4月02日
发表于:2015-03-24 16:56:30
10楼

最近我有个技改项目是西门子PLC中CP341  (422/485)与DCS通讯问题,第一次接触不知道如何下手,加个QQ呗173875444     加我备注    串口通讯

毕庆民

  • 精华:24帖
  • 求助:5帖
  • 帖子:639帖 | 5227回
  • 年度积分:11
  • 历史总积分:10679
  • 注册:2005年6月13日
发表于:2015-03-24 17:09:45
11楼

不但要买341,还要买个MODBUS从站狗,300PLC里调用块设置一下即可

3721_85

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 44回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2004年6月05日
发表于:2015-09-18 12:46:07
12楼

多谢指教!还请问一下多从站轮询应该怎么写!

小鱼那波玩

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 63回
  • 年度积分:11
  • 历史总积分:42
  • 注册:2016年1月13日
发表于:2016-06-28 09:21:45
13楼

跟专家学习了,慢慢研究中。。

Janson

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2016年7月14日
发表于:2016-07-14 22:51:46
14楼

学习了,慢慢研究中!

liji527725

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 11回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2009年12月03日
发表于:2016-08-27 15:04:25
15楼

正在学习中。不明白但却感觉好深奥啊!难道就是传说中的“不明觉厉”?!

fyrwzhao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 69回
  • 年度积分:35
  • 历史总积分:54
  • 注册:2007年7月01日
发表于:2016-09-21 23:12:38
16楼

顶楼主!顶楼主!顶楼主!顶楼主!顶楼主!

cthtll

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 67回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2016年11月29日
发表于:2016-12-22 20:57:06
17楼

正在学习中。慢慢研究

N056

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2009年3月26日
发表于:2017-01-03 10:59:38
18楼

谢谢!

谢谢!

谢谢!

N056

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2009年3月26日
发表于:2017-01-03 10:59:50
19楼

谢谢!

谢谢!

谢谢!

谢谢!

谢谢!               

祁修祥

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2017年1月03日
发表于:2017-01-03 11:56:38
20楼

正在学习中。慢慢研究


相关主题

官方公众号

智造工程师
首页 上一页 1 2 3 4 下一页 尾页