摘要: 应用 3100/3150-MCM 模块实现 AB PLC 与 M0DBUS 网络通讯的方法, 该方法使用 M0DBUS Protocol, 通过开发 AB PLC 的应用程序, 从而实现主从结构网络Communication。
一. 引言
目前的工业控制现场大量使用了 PLC 和各种智能仪表用于生产过程控制。 随着控制规模的扩大和控制Function的复杂化, 常需要多台 PLC 及一定quantity的外设 仪表组成一个控制system。
M0DBUS是美国 M0DIC0N 公司制订的一种串行传输Protocol, 可实现主从命令响 应型Communication。作为一种工业Communication和Distributed控制systemProtocol, 已经得到多家公司的 PLC 和智能仪表支持。
A-B 公司(Allen-Bradley) 是美国生产可编程控制器的主要厂家之一, 具 有先进的Communication和data处理Function。在水处理行业中, 使用大量的可编程控制器用 于生产过程控制, 其中 A-B 公司的 PLC 占了相当的比重。
由于不同硬件厂商支持不同的工业Communication和Distributed控制systemProtocol, 要实现AB PLC 与 M0DBUS仪表组成控制网络, 实现设备的连网, 就existence着互相CommunicationProtocol转 换问题。
3100/3150-MCM 模块是 PR0s0FT TECHN0L0GY 公司推出的在 AB PLC 通用框架 上安装的 M0DBUS Communication Interface模块。该模块可以实现 AB PLC 与 M0DBUS现场设备之 间的Communication, 从而使 AB PLC Communication能力得到增强, 灵活实现 AB PLC 与 M0DBUS 网络 的互连, Complete复杂的控制要求。
本文基于自来水厂泵站集散控制system的设计, 着重介绍 AB 公司的 sLC 系列 的 PLC 通过 3150-MCM 模块和 M0DBUs 网络connect的实现方法。
二. system联网方案
自来水厂泵站集散控制system, 不仅实现一般的逻辑控制, 还具备了包括模 拟量在内的numerical value处理和网络Communication等Function。在现场的实际应用中, system使用的电 机保护装置sepam2000采用了M0DBUSCommunicationProtocol, 出于system控制Function的需要, 要求 在AB PLC中实现对M0DBUSProtocol的支持。我们利用3150-MCM模块建立起M0DBUS设备网。
system的网络结构遵循M0DBUSProtocol的规范, 采用标准简单的主从总线结构, 以PLC作为主机发起Communication, 多台Motor保护装置sepam2000作为从机, 各从机在进 行传输之前必需要等待来自主机的允许信号。主机可以send和receive来自Communication链 上从机的信息, 而从机则始终处于被动状态, 随时准备Response来自主机的Communication请
求。设备层部分网络结构如图1。

三. sepam2000 及 M0DBUS Protocol的介绍
sepam2000 作为Motor保护装置, 提供了所有保护、测量、控制、Communication等Function。
sepam2000 与远程监控system之间的Communication是采用 M0DBUs Protocol的Communication方式。
M0DBUs的Communication采用的是一种主/从式data传输, 在主从结构的Communication方式中, 有一台主机, 多台从机, 主机可与各个从机作双向Communication, 而各从机之间不能通 信。主机与各个从机Communication的message形式为Request/Response帧方式。每次Communication均由主机发 起, 不需握手。主机发出Request帧后, 等待从机返回Response帧直至Responsetime超时。 从机只能通过提供dataResponse主机的Request, 或根据Request做出相应的动作。
M0DBUsProtocol定义了主机Request的format, 包括: Request的编址, 要求动作的Function Coding, 传输data和Error校验等。Request中的编址(即address码) 提供receive主机message 的从机address, 从机根据address判别是否接受该Request, 用户必须设置每台从机的地 址。FunctionCoding告诉指定编址的从机Complete什么样的动作。datafield中包含了从机 执行任务时所需的附加信息。例如, FunctionCoding03表示读取从机的保持register并 返回其中的内容, data area中的信息就必须告诉从机从哪个register开始读, 需要 读的register数。Error校验field为从机提供了信息完整性校验的方法。同样, 响 应的format也是采用M0DBUsProtocol结构, 从机Response的FunctionCoding与接受的Request的Function Coding相对应, datafield包含根据Request返回的data, Error校验field允许主机Confirm 信息内容是否effective。
M0DBUsProtocol共有24种FunctionCoding, 但是并不都适用于sepam2000, 实际应用中 sepam2000只是支持下面有限的几种:
01 读取输出状态
02 读取input state
03 读取内部register内容
04 Read input register内容
05 强制单个输出状态
06 refresh单个register内容
07 读取异常事件状态
08 诊断测试
11 读取计数器和状态字
15 强制多个输出状态
16 refresh多个register内容
如果主机希望读取2号sepam2000从机中register0805h-080Ah的内容, 则需要 调用Function03。主机Request和从机Response的帧format如下:
Request帧:
| address | Function号 | datastartregister编址 | register数目 | Error校验field |
| 2 | 03 | 0C05 | 06 | CRC16 |
Response帧:
| address | Function号 | byte计数 | dataregister(0805) | …… | dataregister(080A) | Error校验field |
| 2 | 03 | 0C | Data1 | …… | Data6 | CRC16 |
而如果主机希望refresh2号sepam2000从机中register0810h的内容并把register 内容设置为1000, 则需要调用Function06。主机Request和从机Response的帧format如下:
Request帧:
| address | Function号 | register编址 | 设置值 | Error校验field |
| 2 | 06 | 0C0E | 1000 | CRC16 |
Response帧: (返回收到的Request帧)
| address | Function号 | register编址 | 设置值 | Error校验field |
| 2 | 06 | 0C0E | 1000 | CRC16 |
sepam2000 的帧format以及所执行的Function都有明确的定义, 不能随意更改。在 Communication过程中, 要确保主机和各从机的对应关系正确。此外, 用户可以根据实际 需要配置合适的传输Baud rate、字符奇even parity、stop bit的个数等Communication parameters设置。
四. AB PLC 中 M0DBUs Protocol的实现
1. MCM 模块的Communication控制
PR0s0FT TECHN0L0GY 公司的 3100/3150-MCM Communication模块, 相当于网络Interface, PLC 通过 MCM 模块与 M0DBUs 总线相连。MCM 模块能快速、可靠地在 AB PLC 中实 现 M0DBUs Protocol。
3100/3150-MCM Communication模块可供用户选择使用主机模式或者从机模式。当 MCM 模块设定为主机, 它对connect到总线上的从机进行控制, 支持 M0DBUs Protocol中(01、 02、03、04、05、06、15、16) 8 种FunctionCoding, 可以send多达一百条定制的Request 指令, 并支持以4广播” 方式发出Request。当 MCM 模块指定为从机, 它Response主机 的Request, 此时能够支持 M0DBUs Protocol中(01、02、03、04、05、06、08、15、16) 9 种FunctionCoding。同时, 无论是主机模式或者是从机模式, 3100/3150-MCM Communication模 块都支持 AsCII 和 RTU 两种传输模式。
当 AB PLC 配置了 3100/3150-MCM Communication模块作为主机模式时, PLC 采用周期 扫描方式, 按Request指令的顺序与从机交换data。每次扫描期间, 处理器使用逻 辑写指令将主机内存中要输出到各从机的data传送到 3100/3150-MCM Communication模块 中的send缓冲区, 模块根据存储的Function指令, send到指定的从机: 而各从机响 应后返回的data, 3100/3150-MCM Communication模块将其先存放在receive缓冲区, 然后 PLC 使用逻辑读指令把data移入相应的Input data存储区。周而复始, 使主机与从机 中的data得到周期性的refresh。整个data流程如图 2 所示:

2. MCM 模块与 M0DBUs 的硬件connect
MCM 模块使用的是与 Rs232C 兼容的标准通讯Interface, 但在实际应用中由于要实 现多点Communication, 所以采用 Rs485 方式。图 3 是 3150-MCM 模块 9 芯串行口与 M0DBUS的connect图

3. MCM 模块的缓冲区管理
PLC 与 MCM 模块之间是通过模块输入、输出映像文件进行data传送。PLC 写 data时, 将data写入输出映像文件, 然后 3100/3150-MCM Communication模块把data映射到相应的缓冲区位置上: PLC 读data时, 根据映射address, 从输入映像文件中读取 模块缓冲区中对应address的data。映像文件的data传送单位为一个 50 byte的data 块, PLC 必须循环地一次传送一个data块。
MCM 把缓冲区按data传送的单位大小, 分为若干个块, 并一一标号, 用块号 对应起来, 并且划分为三个区, 分别用于data、指令、参数设置。data存储区 从 0 块号开始, End于 79 块号, 中间有 4000 个byte的空间, 用于存储receive的 data和send的data, 是主机、从机交换data的场所: 指令存储区从第 80 块至第 99 块, 共 1000 个byte, 用于存储主机模式下, 模块的Function指令表, 每次扫描, 顺序按Function指令列表向从机发出Request帧: 第 255 块号前 40 个byte则专门定义为 模块设置参数存储区, 用于初始化模块。
在Communication过程中, 首先要对主机进行初始化, 即对第 255 块号对应的缓冲区 内容进行参数配置, 主要是定义Communication端口的设置, 模块缓冲区的详细划分。设 置的有以下参数:
(1) 定义 MCM Communication模块两个独立的通讯Interface设置。包括: 选择主机模式 或者从机模式、定义字符奇even parity、stop bit的个数, 传输的Baud rate, Response延时等参数。
(2) 定义模块的缓冲区中存储receivedata的data存储区。包括: receivedata 存储区的start块号, 存储区的连续块数。
(3) 定义模块的缓冲区中存储senddata的data存储区。包括: senddata 存储区的start块号, 存储区的连续块数。
(4) 定义模块的缓冲区中指令存储区。由于指令存储区固定从 80 号数 据块开始, 所以只需指定存储区的块数。
4 . MCM 模块的Function指令设置
MCM 模块处于主机模式下时, Function指令列表存放在模块缓冲区中的指令存 储区。主机向从机发出Request时, 模块从指令存储区逐条读出Function指令, 并按照 M0DBUs Request帧formatsenddata。
指令存储区中每条Function指令的具体内容如下:
| 1 | 模块Communication端口选择 |
| 2 | 从机的站address。从机在receivedata时将本站编址的值与收到的站 address比较, 以此判定信息是否是发给本站的。而主机在receive时 则将收到的站address与send的站address比较, 以判断是否是正确的从机Response |
| 3 | 指令的FunctionCoding |
| 4 | 源address。即主机要send或receive的data在缓冲区中的startdataaddress |
| 5 | dataLength。即主机要send或receive的data的byte count |
| 6 | 目的address。即从机要receive或Response的data的register address |
| 7 | data的Type。用于标示读、写的data是双byte的浮点数还是单byte的整数 |
| 8 | 轮询time |
如果主机希望在 1 号通讯Interface读取 2 号 sepam2000 从机中register 0805h-080Ah 的内容并存放到模块缓冲区第 50 个byte开始的连续 6 个byte中,
Function指令内容如下:
| 端口号 | 从机address | FunctionCoding | 源address | dataLength | 目的address | Type | time |
| 1 | 2 | 3 | 50 | 6 | 0805 | 0 | 0 |
5. AB PLC Communication program的开发
程序执行时, 在第一个扫描周期, 都必须设置 MCM 的状态, 即初始化 MCM 模块。
Communication程序中, PLC 在输入、输出映像文件中为 MCM 缓冲区设置当前以及后 续读写指针, 分别指向当前 MCM 缓冲区data块号, 后续缓冲区data块号。若 MCM 处于data传送允许状态, 即 I1:1/0 = 1 , 00:1/0 = 0 时, PLC 判别当前读写 指针, 调用相应读写逻辑指令。如果指针指向receivedata的data存储区, 则PLC 从 MCM 模块中receivedata: 如果指针指向senddata的data存储区, 则 PLC 向 MCM 模块senddata: 如果指针指向指令存储区, 则 PLC 向 MCM 模块传送Function指令。 每次执行一个data块的传送, 并在传送后, 把后续读写指针覆盖当前读写指针, 从而在下个扫描周期进行下一个data块的传送。PLC 自动周期性扫描, 按照编定 的Function指令向从机的输入/输出data进行send/receive, 以满足data传输的要求。
根据 PLC 的逻辑指令及 MCM 的Communication原理, 画出了图 4 所示的主机Communication程序
结构框图。

五. End语
经过现场debug, 实现了 1 台 AB PLC 与 13 台 sEPAM2000 组成的 M0DBUs 网 络connect。实际应用证明, 这种方式组成的system结构简单, 应用方便, 能满足复 杂的控制需要。
Leave a Reply