西门子S7-200PLC用ModBus协议测试全过程 点击:3822 | 回复:7



电烙铁

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 43回
  • 年度积分:0
  • 历史总积分:136
  • 注册:2003年11月19日
发表于:2005-06-24 19:33:00
楼主
西门子S7-200PLC用ModBus协议归纳 黄自强归纳 2005-6-24 abcd123_gzb@21cn.net Tel:13808888364 图片不好夹,以PDF文件另附 近日,本人做了个S7-226 做从站的ModBus测试。总结如下: 器材::S7-226 Plc(从站) + PG/PPI编程电缆 + 手提电脑(主站) 软件:1. MicroWin4.0 Sp1 2. Commix V1.2 S7-226里的梯形图程序如下: 转成语句表程序则如下: //初始化ModBus LD SM0.1 CALL MBUS_INIT:SBR1, 1, 12, 9600, 0, 0, 128, 32, 1000, &VB0, M10.0, MB11 //服务主站来的请求 LD SM0.0 CALL MBUS_SLAVE:SBR2, M10.1, MB12 从上面的程序可看出,PLC的站号为12。 手提电脑安装Commix V1.2 ,它是可由程序自己添加CRC校验的串口调试软件。 用原装PG/PPI编程电缆连接手提电脑Com1口和S7-200的Port0。 编程电缆拨码开关Bit1…8=01000000 为测试方便把S7-226置I0.2=On。Q0.3强制On。Vb0...Vb9=0…9 为此要先把PLC拨到Stop状态来,运行MicroWin来设置。如下页图: 设完后退出MicroWin 以腾出Com口。 PLC拨回到Run状态来运行上述的程序。 运行Commix V1.2 ,点枕余校验,设为ModBud CRC,起始字节=1,如下图: 我用的是com1, 波特率=9600, 校验位=N无, 停止位=1输入和显示都是HEX, 如下页图: 然后点”打开串口”。 假如我现在要读输入点I0.0到I1.7。键入0c 02 00 00 00 10,则Commix自己算出CRC校验码并发出: 0c 02 00 00 00 10 78 DB | | | | |__78 DB = CRC校验码。 | | | |_______ 00 10 = 十进制16,即长度为16Bit。高字节在前,低字节在后。 | | |____________00 00 = 起始地址。高字节在前,低字节在后。 | |_______________ 02= 功能号。 |_________________ 0c = 十进制12, 站号。 50ms后收到 PLC回答 0c 02 02 04 00 96 B9 | | | | ____ 78 DB = CRC校验码。 | | | |_______ 04即I0.7…I0.0 = 00000100,00即I1.7…I1.0= 00000000。低字节在前,高字节在后。 | | |___________ 02 = 后跟数据长度2字节。 | |_____________ 02= 功能号。 |________________ 0c = 十进制12, 站号。 可见正确读出了I0.2=1。 如下页图: S7-200的ModBus格式如下: S200站号 功能号 n个x数据 CRC校验 功能号1:读取单个/多个线圈(Q输出)的打开/关闭状态。 例:读Q1.7到Q0.0。 Commix发出: 0c 01 00 00 00 10 3C DB | | | | |__3C DB = CRC校验码。 | | | |_______ 00 10 = 十进制16,即长度为16Bit。高字节在前,低字节在后。 | | |____________00 00 = 起始地址。高字节在前,低字节在后。 | |_______________ 01= 功能号。 |_________________ 0c = 十进制12, 站号。 41ms后收到 PLC回答 0C 01 02 08 00 93 FD | | | | |___93 FD = CRC校验码。 | | | |______ 08即Q0.7…Q0.0 = 00001000, 00即Q1.7…Q1.0= 00000000。低字节在前,高字节在后。 | | |__________ 02 = 后跟数据长度2字节。 | |_____________01= 功能号。 |_______________ 0c = 十进制12, 站号。 功能号2:读取单个/多个接触点(I输入)的打开/关闭状态。 例:读I1.7到I0.0。 Commix发出: 0c 02 00 00 00 10 78 DB | | | | |__78 DB = CRC校验码。 | | | |_______ 00 10 = 十进制16,即长度为16Bit。高字节在前,低字节在后。 | | |____________00 00 = 起始地址。高字节在前,低字节在后。 | |_______________ 02= 功能号。 |_________________ 0c = 十进制12, 站号。 50ms后收到 PLC回答 0c 02 02 04 00 96 B9 | | | | ____ 78 DB = CRC校验码。 | | | |_______ 04即I0.7…I0.0 = 00000100,00即I1.7…I1.0= 00000000。低字节在前,高字节在后。 | | |___________ 02 = 后跟数据长度2字节。 | |_____________ 02= 功能号。 |________________ 0c = 十进制12, 站号。 功能号3:读取单个/多个V储存器的值,一次最多读取120个字。 例:读Vb4到Vb13共10个字节。 Commix发出: 0C 03 00 02 00 05 25 14 | | | | |__25 14 = CRC校验码。 | | | |_______00 05=读起始地址后的5个字。高字节在前,低字节在后。 | | |____________00 02 =从库调用MBUS_INIT时设的HoldStart后的2个字起,此处=0+2x2=Vw4. | |_______________ 03= 功能号。 |_________________ 0C = 十进制12, 站号。 40ms后收到 PLC回答 0C 03 0A 04 05 06 07 08 09 00 00 00 00 62 DD | | | | |____ 62 dd = CRC校验码。 | | | |_______Vb4=04,Vb5=05 Vb6=06,Vb7=07,Vb8=08,Vb9=09…vb13=00。低字节在前,高字节在后。 | | |___________ 0A =十进制10.后跟数据长度10字节。 | |_____________ 03= 功能号。 |________________ 0C= 十进制12, 站号。 功能号4:读取单个/多个模拟输入 (AIW)。 本人没试过。 功能号5:写入单个线圈(Q输出)。它并非强制的,程序可以覆盖掉Modbus请求写入的数值。 例:要把Q0.1=On。 Commix发出: 0C 05 00 01 FF 00 DC E7 | | | | |__DC E7 = CRC校验码。 | | | |_______ 只有2 种取值:FF 00 = On , 00 00 = Off。 | | |____________00 01 =Q0.1, Q输出点的地址。高字节在前,低字节在后。 | |_______________ 05= 功能号。 |_________________ 0c = 十进制12, 站号。 40ms后收到 PLC回答 0C 05 00 01 FF 00 DC E7 | | | | |__DC E7 = CRC校验码。 | | | |_______ 只有2 种取值:FF 00 = On , 00 00 = Off。 | | |____________00 01 =Q0.1, Q输出点的地址。高字节在前,低字节在后。 | |_______________ 05= 功能号。 |_________________ 0c = 十进制12, 站号 同时Q0.1亮起。 功能号6:写入单个V储存器字。 例:要把Vb8写成AA, Vb9写成BB。 Commix发出: 0C 06 00 04 AA BB F7 C5 | | | | |__F7 C5 = CRC校验码。



guohongchao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2006年7月31日
发表于:2006-09-24 17:01:00
1楼
CRC校验用梯形图怎么编啊?会的发一个,不胜感谢!

李兴成

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2009-06-27 14:55:23
2楼

你好,我做了一个小项目,用到了Modbus通讯。PLC用的是西门子cpu226,通讯口为PORT0, 数据线用的是PC/PPI编程电缆。通讯协议用的是modbus从站协议,modbus测试软件用的是modScan32。测试不成功。显示:time out 。。。。。。。

谁能帮我分析一下,不胜感激。Q~Q:20087796

 

老愚者

  • 精华:1帖
  • 求助:0帖
  • 帖子:9帖 | 2253回
  • 年度积分:0
  • 历史总积分:10007
  • 注册:2006年8月20日
发表于:2009-06-27 16:01:04
3楼

2楼先生

超时?

是因为长度不对.

modScan32的默认长度100,你的实际长度多少?

修改modScan32的长度,应小于或等于你的实际通讯长度.

 

powersstar

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 30回
  • 年度积分:29
  • 历史总积分:512
  • 注册:2008年9月15日
发表于:2009-06-30 14:29:30
4楼

本人手里有214的CPU转让,二手的,想学习的朋友进,价格可以小刀!

http://tb.imust.net

QQ:82100202

zxpxw0316

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2009年10月18日
发表于:2009-10-23 13:00:36
5楼

为何我用cpu224 就是通讯不了呢? 都没有反馈信息?!

qulikang

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:25
  • 注册:2009年9月10日
发表于:2010-12-20 10:22:24
6楼

谢谢楼主了,我找了好久终于找到了,不知道行不行试试再说

LN369

  • 精华:0帖
  • 求助:40帖
  • 帖子:305帖 | 1715回
  • 年度积分:0
  • 历史总积分:6747
  • 注册:2004年9月09日
发表于:2010-12-20 16:14:09
7楼

很久的贴了,不知PDF有了没有?


热门招聘
相关主题

官方公众号

智造工程师