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

PLC技术漫谈之6.2MODBUS通信协议5 点击:1773 | 回复:23



王晟磊

    
  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2005-11-17 15:18:00
楼主
1-2通讯功能 在功能码1到6, 15和16的讯息文会指出在MODBUS上的那一个地址会被寻址到,例如功能码1 ,5及15会参考到COIL (0XXXX),功能3, 6及16参考到保留缓存器(HOLDING REGISTER) (4XXXX)。所有的参考地址都是以相对于零来做参考点,例如COIL 00127是以0126来被参考到的(0126 decimal)=007E(hex),在MODBUS的格式里所有的数字都是以十六进制的方式来表示的。 在本章中所举的例子会显示协议(PROTOCOL)与使用RTU或ASCII的模式是互相独立的,使用此软件程序的程序者可以利用以下的方法来订定他们特殊应用时所须的协议。 以下所示的例子是”读输出缓存器” 40108!~40110 (M-BUS SLAVE接口单元的地址是06),他们的信息文以RTU或ASC II MODE来表示的话,将会如下图所显示: 询问: 信息文 RTU ASC II 表头 无 引号 地址 0000 0110 0 6 功能 0000 0011 0 3 开始之缓存器:高次序 0000 0000 0 0 低次序 0110 1011 6 B 缓存器之数目:高次序 0000 0000 0 0 低次序 0000 0011 0 3 错误侦测 0111 0101 8 9 尾部 1010 0000 无 回车 跳行 共8字节 共17字节 响应: 信 息 文 RTU ASC II 表头 无 引号 ( : ) 地址 0000 0110 0 6 功能 0000 0011 0 3 开始之缓存器: 0000 0110 0 6 高次序 0000 0010 0 2 低次序 0110 1011 2 B 资 料:高次序 0000 0000 0 0 低次序 0110 0011 6 3 高次序 0000 0000 0 0 低次序 0110 0011 6 3 高次序 0000 0000 0 0 低次序 0110 0011 6 3 错误侦测 回转余数法 纵式余数法 尾部 无 回车 跳行 共13字节 共27字节 1-2-1读取输出状态(功能码01)-READ OUTPUT 0XXXX STATUS 1.询问 此功能允许使用者从被寻址到的SLAVE所控制的断续性输出得到逻辑线圈(LOGIC COIL)开开/关的状态 广播模式并不支持此项功能码。每个询问的要求将可寻址到最大1024个线圈,不过,特定的SLAVE装置可能会被限制在此最大量以下。 特别注意的一点就是线圈的起始号码与实际的对应,因为线圈(COIL)是从零开始,所以第1号COIL是0,第2号COIL是1,依此类推 图1-2-1是此功能的例子,读取的是17号SLAVE上的COIL 00020到00056的状态:



wincc123

  • 精华:4帖
  • 求助:0帖
  • 帖子:41帖 | 765回
  • 年度积分:1
  • 历史总积分:1067
  • 注册:2003年10月13日
发表于:2006-06-07 17:01:00
21楼
写这个CRC和LRC只要指针和循环熟悉,还是不大难的,当然,诚如王工所言,现在很多的新出的PLC都支持CRC指令和LRC指令,算是一大进步.
V80想必支持吧,那可是你老王的儿子哦,哈哈

budong

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 12回
  • 年度积分:0
  • 历史总积分:69
  • 注册:2004年9月02日
发表于:2006-06-07 22:22:00
22楼
使用PLC作CRC校验还是比较慢的。

一般的PLC的MODBUS指令都是自己做校验的,代码很简单
在GOOGLE上一搜都是源代码。
我以前做的时候就是网上抄的,没问题的

人间

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 77回
  • 年度积分:0
  • 历史总积分:211
  • 注册:2005年8月06日
发表于:2006-06-07 22:54:00
23楼
高手就是高手.说的话就是不一样,小弟佩服.看来工控还真的有很多内容值得去学习!

热门招聘
相关主题

官方公众号

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