《Micro830中文modbus教程.ppt》由会员分享,可在线阅读,更多相关《Micro830中文modbus教程.ppt(44页珍藏版)》请在三一办公上搜索。
1、Allen-Bradley Micro800TM 可编程控制器Micro830/830 Modbus 技术培训Jan-23,2013,Modbus 协议概述,Modbus是Modicon公司在上世纪70年代为Modicon PLC开发的一款通信协议。该协议使用简单,多年来被很多第三方设备供应商采用。属于半双工的主/从协议。由主站启动通信(称为的“查询”),从站根据主站的要求作出响应。从站地址范围:1 247“0”地址用于广播主站没有地址不使用ACK或NAK应答机制 数据传送只是由主站发起查询,从站响应来完成Modbus 接收者根据“静音”时间间隔来判断数据包是否传送完毕。,Modbus 串行传
2、输模式,Modbus ASCII编码系统:十六进制的ASCII码09、AF(每个ASCII码只包含一个十六进制字符)每个字包括:1 个开始位、7个数据位、可选的校验位、12个停止位错误校验:纵向冗余校验(LRC)间隔:半个字符容易实现(LRC vs.CRC),间隔较短Modbus RTU编码系统:8位二进制码表示的十六进制09、AF(8位数据中包含二个十六进制数)每个字包括:1 个开始位、8个数据位、可选的校验位、12个停止位错误校验:循环冗余校验(CRC-16)间隔:3.5个字符更高效(包含的数据位较多),容错能力强(CRC 校验),间隔时间很重要,一个Modbus RTU 的信息帧期望在一
3、个连续的数据流中被传输。如果在数据传输完成前出现一个时间大于预设的间隔时间的“静音”,那么接收者将丢弃不完整的数据,并且预期下一个字是下一个数据的地址信息,这将导致信息传输失败。同理,如果下一个信息与上一个信息间隔小于预设的间隔,那么接收者会认为该信息是上一个信息的延续,这将导致校验出错。,间隔时间很重要,因此,Modbus的健壮性并不比过去的会出现虚假字符的无线电网络强,也不比延时不确定的多通道的卫星网络强。许多使用 Modbus 的人(包括我们在内),都会遇到因为间隔时间设置不当而带来的麻烦。,Modbus 信息帧,ASCII 数据帧:开头 地址 功能码 数据 LRC校验 结尾:(3A)2
4、个字符 2个字符 n个字符 2个字符 CRLF(0D0A)RTU数据帧:开头 地址 功能码 数据 CRC校验 结尾T1-T2-T3-T4 8位 8位 n x 8位 16位 T1-T2-T3-T4,Modbus 信息帧,(从站)地址一个byte,有效值1247,0用于广播功能代码一个byte,有效值1255告诉从站需要干什么数据包含从站与功能码相应的动作所必须使用的附加信息,如:起始地址、数据长度等某些功能码不需要附加数据(因此,Modbus RTU包最小长度是4个byte),Modbus 信息帧,响应从站响应时,在地址区发回自己的地址从站响应时,发回原先的功能码,作为接收正确的响应如果有错误,
5、则从站响应时,会将原功能码的最高位置位如果有错误,则从站响应时,会将错误代码放在数据区典型的错误响应01 非法功能:出现从站不支持的功能码02 非法数据地址:出现无效的数据地址03 非法数据数值:出现无效的数据数值,Modbus 功能格式,Modicon 处理器有4个主要数据存储区(数据表):线圈(输出位 读/写):00001-09999,010000-065536输入(输入位 只读):10001-19999,100000-165536输入寄存器(16位字-只读):30001-39999,310000-365536保存寄存器(16位字-读/写):40001-49999,410000-46553
6、6注意:每组的数据范围都从“1”开始然而,所有的Modbus信息帧中的数据地址偏移量是“0”!第一个出现的数据,其地址是“0”。例如:线圈1 在Modbus的地址是“0000”线圈127 在Modbus的地址是十六进制“007E”(十进制126)保存寄存器40001在Modbus的地址是“0000”,(4XXXX 或 4XXXXX 隐性地与功能码相对应),Modbus 功能格式,这给文档描述带来混淆。你会发现如下针对保持寄存器的描述,例如:保持寄存器0(从0开始的编址方式)保持寄存器1(从1开始的编址方式)保持寄存器40001(5位地址格式),或 400001(6位地址格式)数据长度当读写多个
7、数据时,表示数据长度的字会出现在数据和校验区之间。,Modbus 功能代码,功能代码 名称地址范围(5 位 6 位)01读线圈状态00001-09999,000001-06553602读输入状态10001-19999,100001-16553603读保持寄存器40001-49999,400001-46553604读输入寄存器30001-39999,300001-36553605强制(写)单个线圈00001-09999,000001-06553606预置(写)单个寄存器40001-49999,400001-46553615强制(写)多个线圈00001-09999,000001-06553616预
8、置(写)多个寄存器40001-49999,400001-465536,Micro830/850 串口设置,内置的串口设置方法与Plug-in 串口模块(2080-SERIALISOL)的设置方法相同(注意:高级设置时,窗口需要展开):,Micro830/850 串口设置,CCW Release 2的通信驱动有4个可选:ASCII、CIP Serial(缺省值)、Modbus RTU、Shutdown:可选比特率:1200,2400,9600,19200,38400(缺省值),校验类型可选:None(缺省值)、Odd、Even.,串口Modbus RTU 的设定,Unit Address:0(缺
9、省值),1247,是Modbus RTU 从站地址。注意:“0”地址用于广播,不用于Modbus RTU 从站地址。Modbus RTU 主站没有地址,可以设为“0”。Modbus Role有三种可选:Modbus RTU Master(缺省值)、Modbus RTU Slave、Modbus RTU Auto(既可作主站,也可作从站),串口Modbus RTU 高级设定,Media:RS232(缺省值)无握手RS232 RTS/CTS 使用 RTS/CTS 握手RS485 内置串口,需要1763-NC01 电缆连接RTS Pre-Delay/Post-Delay:0ms(缺省值),0-999
10、,999,999ms在传输前和传输后,RTS被置位的最短提前和滞后时间(只有当介质设为 RS232 RTS/CTS 时).Data Bits:固定8位Stop Bits:1(缺省)或 2,串口Modbus RTU 高级设置,Response Timer:200ms(缺省值),0-999,999,999msModbus RTU 主站等待从站响应的最长时间,该时间对所有的 MSG_MODBUS 指令有效。如果在此时间内没有响应,则指令出现超时故障(故障代码是55)。注意:对于一个硬接线的Modbus 网络,该时间可以减少到 200ms(对应9600波特率),100ms(对应19,200波特率),5
11、0ms(对应38,400波特率),以减少无响应节点的等待时间。Broadcast Pause:200ms(缺省值),0-999,999,999msModbus RTU 主站发完前一个广播后到下一个广播前的最短时间间隔,串口Modbus RTU 高级设置,Inter-Char Timeout:0ms(缺省值),0-999,999,999msModbus RTU 协议根据传输过程中“静音”时间是否超过“Inter-Char Timeout”的值来判断一个数据包是否已完全被接收。数字0意味着Modbus的该值为3.5个字符的时间间隔。,串口诊断,在Release 2,CCW 仍不能显示串口诊断计数。
12、当任何一个串口无论是发送数据还是接收数据,控制器的通信指示灯COMM都会闪烁(因此,在多串口情况下,无法判断哪个串口正在收发数据)。COMM LED指示灯闪烁最短时间是 250 毫秒。,Modbus 从站 Mapping 设置,为了响应Modbus 主站的读写命令,PLC的变量必须映射到 Modbus 地址中双击Variable Name下方的单元格,打开变量选择窗口:,Modbus 从站 Mapping 设置,选择变量,点击 OK,然后输入合适的Modbus地址,(从1开始,有5位的和6位的二种格式):0 xxxx 或 0 xxxxx,输出/线圈(最高到 09999 或 065536)1xx
13、xx 或 1xxxxx,输入/触点(最高到 19999 或 165536)3xxxx 或 3xxxxx,输入/只读寄存器(最高到 39999 或 365536)4xxxx 或 4xxxxx,保持/读写寄存器(最高到 49999 或 465536),Modbus 从站 Mapping 设置,CCW 会根据数据类型,自动填写已经Mapping的地址数量,Modbus 从站 Mapping 设置,重要提示!强烈推荐:连续使用Modbus地址,中间不要留无用的地址。因为大多数Modbus 主站设备(如PVC屏)为了提高效率,会对连续的数据块进行读写。例如,如果你只让PVC显示Modbus 寄存器400
14、01 和40009的值,那么,PVC会使用一条读指令将4000140009的值一次性全部读入,而不会分二次读。如果40002-40008 的值没有被Map,则指令会出现02错误代码(非法数据地址)。,Modbus 从站 Mapping 设置,重要提示!(接上页)你可以在Modbus主站里设置块读写的长度。对PVC来说,在控制器设置栏里,可以设置该参数,缺省值是32。,Modbus 从站 Mapping 设置,限制:Modbus mapping 表中,最多只能有200条有些数据类型:TIME、DATE、STRING,不能map任何数据类型的数组都不能map,Modbus 主站 Message 指
15、令,为了使用Modbus message 指令,先将一个block拖放到梯形图中,然后选择 MSG_MODBUS,Modbus 主站 Message 指令,黄色三角形警告,提示必须为指令块的输入端指定所需数据类型的常数或变量。输出端则不是必须的。,Modbus 主站 Message 指令,INMSG_MODBUS 指令由IN的上升沿触发,一旦触发,指令将一直执行,不管IN后来是否为真,直到执行完成。Cancel将Cancel置为真是唯一终止MSG_MODBUS执行的方法。通常你可以让该引脚常 FALSE,以确保指令正常执行。,Modbus 主站 Message 指令,LocalCfg 用于设置
16、本地(主站),其数据类型是MODBUSLOCPARA,结构如下:LocalCfg.ChannelLocalCfg.TriggerTypeLocalCfg.CmdLocalCfg.ElementCnt,Modbus 主站 Message 指令,创建一个类型为MODBUSLOCPARA的本地变量,并将其指定给MSG指令的LocalCfg 输入。你可以为其设置初始值(如下图),也可以通过变量和逻辑程序来赋值。MyLocalCfg.Channel=5(通道号:左起第一个插槽)MyLocalCfg.TriggerType=0(触发类型:非连续型)MyLocalCfg.Cmd=3(命令:读保持寄存器)My
17、LocalCfg.ElementCnt=4(数据长度:4 个字),Modbus 主站 Message 指令,TargetCfg 用于设置远端(从站),其数据类型是 MODBUSTARPARA,数据结构如下:TargetCfg.AddrTargetCfg.Node,Modbus 主站 Message 指令,创建一个类型为MODBUSTARPARA的本地变量,并将其指定给MSG指令的TargetCfg 输入。你可以为其设置初始值(如下图),也可以通过变量来赋值。MyTargetCfg.Addr=8449MyTargetCfg.Node=100,Modbus 主站 Message 指令,LocalA
18、ddr 用于数据缓存,其数据类型是MODBUSLOCADDR,该类型是一个由125个WORD组成的数组。对读命令而言,LocalAddr 用来储存从从站读来的数据(最多125个WORD)。对写命令而言,LocalAddr 存放需要写入从站的数据(最多123个WORD)。创建一个类型为MODBUSLOCADDR的本地变量,并将其指定给MSG指令的LocalAddr 输入。,Modbus 主站 Message 指令,现在,MSG_MODBUS 指令已经设置成功:通过插在左边第一个插槽的2080-SERIALISOL plug-in 串口模块,用非连续触发的方式,读取从站的48449-48452保持
19、寄存器,数据存放在MyReadData1MyData4,从站地址为100。当MSG指令成功执行完成后,输出Q 将置为TRUE(MSG_MODBUS_1.Q=1).如果MSG指令执行不成功,则输出Q 保持FALSE,输出 Error 置为TRUE(MSG_MODBUS_1.Error=1),同时输出 ErrorID 给出十进制的错误代码。,Modbus 主站 Message 指令,在连续型触发模式下(MyLocalCfg.TriggerType=1),输出Q 和ERROR 保持false,ERRORID 为 0每个串口(48 点的控制器可支持5个plug-in串口模块,以及一个内置的串口)拥有自
20、己独立的数据收发缓冲区。,Modbus 主站 Message 指令,MSG_MODBUS 成功执行完毕:MSG_MODBUS 执行出错:,Modbus 主站 Message 指令,故障码及说明,Message 指令编程示例,基本的 MSG 梯形图逻辑:非连续型每个IN的上升沿触发一次当MSG指令被触发时,其输出端 Q 和 Error 将被复位,Message 指令编程示例,基本的 MSG 梯形图逻辑:连续型 MSG 尽可能快只要输入IN为TRUE,Message 指令一旦执行完成后,无论是否成功,都会立即再一次触发,而且不会输出 Q 和Error,Message 指令编程示例,高级的 MSG
21、梯形图逻辑:连续型 MSG,带 disable 位与上一个例子基本相同,只是多了一个Message Disabled 功能,Message 指令编程示例,高级的 MSG 梯形图触发逻辑:连续型 MSG,带 disable 位,以及延时触发功能当message 成功执行完毕(MSG_MODBUS_4.Q=TRUE),或执行出错时(MSG_MODBUS_4.Error=TRUE),定时器开始延时,延时到达时(TON_1.Q=TRUE),MSG 指令将被再一次触发。,Message 指令编程示例,高级的 MSG 梯形图触发逻辑:连续型 MSG,带 disable 位,以及延时触发功能,故障次数计数,并且记录最后一次故障代码,Message 指令编程示例,按顺序执行多个Message指令多个message指令之间必须互锁,(人们通常想在写入前,先读一次)这样可容易辨别到底是哪一个Message指令正在执行(监视MSG_Sequencer 的当前数值就行了),Message 指令编程示例,按顺序执行多个Message指令(第一个Message指令执行完成后,指针加一),Message 指令编程示例,按顺序执行多个Message指令(最后一个MSG指令执行完成后,指针加一),
链接地址:https://www.31ppt.com/p-5439937.html