H2U系列PLC MODBUS通讯指令 点击:6821 | 回复:18



ling686

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:30:44
楼主

通过MODBUS指令,PLC可方便的与变频器通讯。

MODBUS指令只能用于COM1通信,若D8126=20h,COM1协议为MODBUS-RTU主站(指令);若D8126=30h,COM1协议为MODBUS-ASC主站(指令);




ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:31:51
1楼
        MODBUS指令有两种,一种符合MODBUS RTU协议,一种符合MODBUS ASC协议,通过D8126确定。用哪种指令由从站所支持的协议格式定,若从站两种协议都支持而用户要求较快速的通信,建议选用RTU协议。两种协议只是通信格式不一样,对用户编程都一样,下面仅就RTU协议做说明。
        MODBUS指令可以同时存在多条并且全部被驱动,系统内部会协调指令的顺序执行,MODBUS协议要求无论写还是读,从站均需要有应答(广播除外)。一条MODBUS指令可能需要执行较长时间,一般需要多个扫描周期。在一个扫描周期内,指令被驱动,但不一定被执行。
        若存在多条MODBUS指令,其执行顺序是这样的:从开机开始,扫描第一条被驱动的MODBUS指令,若扫描到,把该MODBUS的参数记录下来,在后台执行。执行完后,返回用户程序,从刚执行的MODBUS指令位置开始扫描下一条被驱动的MODBUS指令并执行,周而复始。

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:32:14
2楼
指令格式:RS(ADDR&CMD,REGADDR,REGLEN,DATABUF)
ADDR&CMD:从机地址和MODBUS功能码,高8位表示从机地址,即目标设备地址。低8位表示MODBUS功能码,由标准MODBUS协议定义,目前支持功能码有0x01,0x02,0x03,0x04,0x05,0x06,0x0f,0x10。具体含义请参照标准MODBUS协议或目标设备MODBUS协议。
REGADDR:所要读或写的从机线圈(1位)或寄存器(16位)地址,取值参考从机MODBUS协议。可为元件或常数
REGLEN:所要读写的从机线圈或寄存器个数,可为元件或常数
DATABUF:只能为D元件。本机用于存放数据的起始寄存器,即数据缓冲区。缓冲区长度与REGLEN相关,至少取1。若MODBUS命令为读,指令成功执行完后,把从机数据读到缓冲区中,若MODBUS命令为写,把缓冲区发送给从机。用户在设计程序时需要计算缓冲区长度,预留足够的寄存器作缓冲区。

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:32:56
3楼
相关状态标志
M8122:MODBUS指令执行状态指示,OFF时表示指令执行完毕,ON时为执行中。若M8122为OFF,且指令在一个扫描周期内能流有效,M8122置为ON,系统将会把指令参数记录下来,转入后台执行该指令的通信要求。通信执行完后,当再次运行到此指令的位置时,无论该指令能流是否有效,均会把M8122复位为OFF,立即扫描下一条能流有效的指令,记录指令参数并转入后台执行该指令的通信要求。
M8123:指令通信情况指示,ON表示通信异常,OFF表示通信正常
M8063:指令错误指示,错误码存于D8063。
D8063:错误码

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:36:14
4楼
例子1:不断的读从机地址为100的寄存器,数据存于D10
初始化:
D8126 = H0020 设定通信协议为MODBUS RTU指令
D8120 = H0081 设定COM1通信格式为:9600,8N1
D0 = H0103 Addr&Cmd从机地址为01和MODBUS命令码为03,读寄存器
D1 = H0064 RegAddr要操作的从机的寄存器地址
D2 = H0001 RegLen要操作的寄存器的个数
D10 Buf本PLC数据缓冲区,本例中读命令通信成功后数据存于D10
梯形图如下:

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:36:21
5楼
执行结果:开机后,PLC不断读从机地址为100的寄存器,通过COM1发送以下一帧数据(16进制):01 03 00 64 00 01 C5 D5
01:代表从机地址,D0 的高8位
03:MODBUS命令码,D0的低8位,意义为读从机寄存器
00 64:所要读读从机寄存器地址,D1的值
00 01:所要读的寄存器个数,D2的值
C5 D5:CRC校验码

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:37:29
6楼

若从机也是H1U/H2U系列PLC,设定为MODBUS RTU从站协议,梯形图如下:

从机正确响应数据帧(16进制):01 03 02 51 00 85 D4
从机把D100(寄存器地址为H0064)发给主机
01:代表从机地址
03:MODBUS命令码
02:表示回复2个字节的有效数据
51 00:寄存器数据,即D100 的值
85 D4:CRC校验码

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:38:11
7楼
例子2:用三条MODBUS指令,分别的读从机地址为H0064,F001和F805的寄存器,数据存于D10,D20和D30中
梯形图如下:

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:39:08
8楼
执行结果,PLC通过串口COM1依次循环发送以下三帧数据(16进制):
01 03 00 64 00 01 C5 D5
01 03 F0 01 00 01 E6 CA
01 03 F8 05 00 01 A5 6B

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:40:50
9楼

回复:从机仍然是H1U/H2U系列PLC,设定为MODBUS RTU从站协议,梯形图如下:

从机响应
对第一帧数,从机响应数据帧为(16进制):01 03 02 51 00 85 D4
意义是:从机把D100(D100寄存器的地址为H0064)的值H5100发给主机
对第二帧数,从机响应数据帧为(16进制):01 03 02 00 00 B8 44
意义是:从机把T1(T1寄存器地址为F001,参见H1U/H2U系列PLC MODBUS从站协议)的值H0000发给主机
对第三帧数,从机响应数据帧为(16进制):01 83 02 C0 F1
意义是:读寄存器错误
01:从站地址
83:读寄存器错误
02:错误码,地址错误,原因是地址HF805的寄存器不存在
C0 F1:CRC校验码

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-06 11:42:36
10楼

与汇川变频器通讯同理,CRC,通讯顺序控制等该指令已自动完成,用户只需要写上指令就可以了,非常简单。

huangjia

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 110回
  • 年度积分:0
  • 历史总积分:37
  • 注册:2008年6月16日
发表于:2009-08-07 15:44:35
11楼
看上去,和三菱有不同。三菱是需要用脉冲发出RS指令并且必须要,一条发送接收完成才可以跟住下一条。汇川是自动排顺序发,只要接通就会自动排队,免了好多的麻烦。但是modbus应该是半双工,广播收发的形式。如果可以学canbus全双工,那么就会很快了。我现在走5个基站,已经好慢了。

ling686

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 107回
  • 年度积分:1
  • 历史总积分:178
  • 注册:2004年11月02日
发表于:2009-08-07 16:15:42
12楼
canbus也是半双工的,但是可以无主从通信,且通信速率快,最高可达1Mbps;RS485(modbus协议)是半双工,主从通信方式,最高速率115.2Kbps;RS485通信速度大约是CANBUS的十分之一。

huangjia

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 110回
  • 年度积分:0
  • 历史总积分:37
  • 注册:2008年6月16日
发表于:2009-08-07 18:55:41
13楼
原来如何。我理解错了。工业以太肯定可以全双工

广州工控人来了

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 47回
  • 年度积分:0
  • 历史总积分:506
  • 注册:2003年3月05日
发表于:2010-05-12 15:49:04
14楼

2. 读输入寄存器
功能码:04
数据起始地址:30001~30008
说明:读取输入数据
数据说明:读取的是十六位整数或无符合整数
地址
描述
说明
30257
第1路模拟量输入低16位
30258
第1路模拟量输入高16位
高16bit为0
30259
第2路模拟量输入低16位
30260
第2路模拟量输入高16位
30261
第3路模拟量输入低16位
30262
第3路模拟量输入高16位
30263
第4路模拟量输入低16位
30264
第4路模拟量输入高16位
30265
第5路模拟量输入低16位
30266
第5路模拟量输入高16位
30267
第6路模拟量输入低16位
30268
第6路模拟量输入高16位
30269
第7路模拟量输入低16位
30270
第7路模拟量输入高16位

 

我的模块是地址格式是这样, 请大侠回复,怎么读。

关junbo

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 21回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2011年7月23日
发表于:2012-01-06 14:48:33
15楼
楼主能不能写一个can通信的汇川plc做从站的例子啊!谢谢

关junbo

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 21回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2011年7月23日
发表于:2012-01-06 14:50:04
16楼
希望能发我邮箱!blue_sky_gjb@sina.cn

纵横军团-小Q

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 115回
  • 年度积分:0
  • 历史总积分:59
  • 注册:2011年8月01日
发表于:2013-10-31 15:57:42
17楼

楼主能把这份资料发到我邮箱吗 390437699@qq.com 谢谢~!!!!

南通锐通浸渍线

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:16
  • 注册:2014年5月01日
发表于:2014-09-07 16:32:41
18楼

汇川PLC,与汇川22台变频器485通信,启动停止反应特别慢!不知道为什么!15964609166


热门招聘
相关主题

官方公众号

智造工程师