文章目录一、什么是Modbus1. Modbus 简介2. Modbus 常用术语3. Modbus 事务处理二、Modbus 软件简介1. Modbus Poll主站设备1.1 Modbus Poll 简介1.2 Modbus Poll 使用2. Modbus Slave从站设备2.1 Modbus Slave 简介2.2 Modbus Slave 使用3. 虚拟串口软件3.1 软件简介3.2 虚拟串口的使用4. Modbus Poll 与 Modbus Slave 互联/通一、什么是Modbus1. Modbus 简介Modbus 协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议控制器相互之间、或控制器经由网络如以太网可以和其它设备之间进行通信。Modbus 协议使用的是主从通讯技术即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等典型的从设备如 PLC 可编程控制器等。有了它不同厂商生产的控制设备就可以连接成工业网络进行集中监控。Modbus 协议定义了一个控制器能够认识和使用的消息结构而不管它们是经过何种网络进行通信的;而且描述了控制器请求访问其他设备的过程如何应答来自其他设备的请求以及怎样侦测错误并记录并制定了统一的消息域的结构和内容。 当在Modbus网络上通信时Modbus协议决定了每个控制器必须要知道它们的设备地址识别按地址发来的消息决定要产生何种行为。如果需要回应则控制器将生成反馈信息并通过Modbus协议发送。Modbus通讯物理接口可以选用串口包括RS232、RS485和RS422等也可以选择以太网口。其通信遵循以下的过程主设备向从设备发送请求从设备分析并处理主设备的请求然后向主设备发送结果如果出现任何差错从设备将返回一个异常功能码此协议定义了一个控制器能认识使用的消息结构而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程如何回应来自其它设备的请求以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在Modbus网络上通信时此协议决定了每个控制器须要知道它们的设备地址识别按地址发来的消息决定要产生何种行动。如果需要回应控制器将生成反馈信息并用Modbus协议发出。在其它网络上包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。Modbus 的工作方式是请求/应答每次通讯都是主站先发送指令可以是广播或是向特定从站的单播从站响应指令并按要求应答或者报告异常。当主站不发送请求时从站不会自己发出数据从站和从站之间不能直接通讯。Modbus 是一种应用层消息传递协议位于 OSI 模型的第 7 层。它提供连接在不同类型总线或网络上的设备之间的客户端/服务器通信。Modbus 通信栈如下2. Modbus 常用术语3. Modbus 事务处理Modbus 协议允许在各种网终体系结构内进行简单通信每种设备 (包括PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备) 都能使用 Modbus 协议启动远程操作。在基于串行链路和以太网 (TCP/IP)的 Modbus 上可以进行相互通信。一些网关允许在几种使用MODBUS协议的总线或网络之间进行通讯。MOUBUS 网络体系结构的实例Modbus 是一个请求、应答协议并且提供统一的功能码用于数据传输服务。Modbus功能码是Modbus请求/应答PDU (Protocol Data Unit协议数据单元)的元素之一所谓的PDU其实就是 Modbus 协议定义的一个与基础通信层无关的简单协议数据单元。特定总线或网络上的Modbus协议映射能够在ADU (Application Data UInit 应用数据单元)上引入一些附加域从而实现完整而准确的数据传输。为了寻求一种简洁的通信格式Modbus协议定义了PDU模型即功能码数据的格式而为了适应多种传输模式又在PDU 的基础上增加了必要的前缀 (如地址域)和后缀(如差错校验) 形成了ADU模型见下图。通用MODBUS帧如下Modbus 事务处理过程主机设备 (或客户端)创建Modbus应用数据单元形成查询报文其中功能码标识了向从机设备 (或服务器端)指示将要执行的操作。其中功能码占用1字节有效的码字范围是十进制1 ~ 255 (其中128 ~255为异常响应保留) 。查询报文创建完毕主机设备 (或客户端) 向从机设备 (或服务器端)发送报文从机设备 (或服务器端)接收报文后根据功能码做出相应的动作并将响应报文返回给主机设备 (或客户端)如图下所示MouBus 事务处理无异常如果在一个正确接收的Modbus ADU中不出现与请求Modbus功能有关的差错那么从机设备 (或服务器端) 将返回正常的响应报文。如果出现与请求Modbus功能有关的差错那么响应报文的功能码域将包括一个异常码主机设备(或客户端)能够根据异常码确定下一步执行的操作对于异常响应服务器返回一个与原始功能码等同的码设置该原始功能码的最高有效位为逻辑1用于通知主设备客户端。如下图所示MouBus 事务处理异常响应二、Modbus 软件简介为了更好的学习和理解 Modbus这里推出三个软件 Modbus Poll主站设备、Modbus Slave从站设备和虚拟串口软件借助三款设备我们可以在PC上做一些基础实验更加直观地观察通信数据加深我们的理解我们将它称为Modbus学习必备三件套这是一个很好的入门方法。1. Modbus Poll主站设备1.1 Modbus Poll 简介Modbus Poll 是 Modbus 主站设备仿真器用于测试和调试 Modbus 从设备便于观察Modbus 通信过程中的各种报文数据。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备或者其它Modbus协议的测试和仿真。它支持多文档接口即可以同时监视多个从设备/数据域。每个窗口简单地设定从设备 ID功能地址大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改变一个单独的寄存器简单地双击这个值即可。或者你可以改变多个寄存器/线圈值。提供数据的多种格式方式比如浮点、双精度、长整型可以字节序列交换。该软件支持 Modbus RTU、ASCII、TCP/IP 等协议模式。Modbus Poll 支持下列协议模式:1.2 Modbus Poll 使用软件打开界面如下状态栏Tx 0表示向主站发送数据帧次数图中为0次Err 0 表示通讯错误次数图中为0次ID 1表示模拟的Modbus子设备的设备地址图中地址为1F 03表示所使用的Modbus功能码图中为03功能码SR 1000ms 表示发送周期1S一次。红字部分表示当前的错误状态“No Connection”表示未连接状态。建立连接点击 Connection-Connect 进入配置页面选择我们想要的连接选择我们虚拟出来的串口选择模式例如:我们选择串口的连接方式选则 RTU 模式对应我们的 Modbus RTU 协议接下来在设置波特率、比特位、校验位、停止位如下图所示设置参数点击Setup-Read/Write Definition进入配置页面配置从机地址、功能码、地址类型、寄存器地址、访问数量、轮询时间具体配置如下图2. Modbus Slave从站设备2.1 Modbus Slave 简介Modbus 从设备仿真器可以仿真32个从设备/地址域。每个接口都提供了对EXCEL报表的OLE自动化支持。主要用来模拟Modbus从站设备,接收主站的命令包,回送数据包。帮助Modbus 通讯设备开发人员进行 Modbus 通讯协议的模拟和测试用于模拟、测试、调试Modbus 通讯设备便于观察Modbus 通信过程中的各种报文数据可以32个窗口中模拟多达32个Modbus子设备。与Modbus Poll的用户界面相同支持功能01, 02, 03, 04, 05, 06, 15, 16, 22 和 23监视串口数据。Modbus Slave 支持下列协议模式:2.2 Modbus Slave 使用获取软件链接同上下载完后主页面如图所示建立连接点击 Connection-Connect 进入配置页面选择我们想要的连接选择我们虚拟出来的串口选择模式接下来在设置波特率、比特位、校验位、停止位如下图所示设置参数点击Setup-Read/Write Definition进入配置页面配置从机地址、功能码、地址类型、寄存器地址、访问数量具体配置如下图这里有两点需要我们注意一下一是Function列表框选择功能中的0x~4x表示的是存储区0区、1区、3区、4区输出线圈输入线圈保持寄存器输入寄存器Modbus 协议规定了4个存储区 分别是0、1、3、4区 其中0区和4区是可读可写1区和3区是只读。二是Address 项这里需要特别强调一下Address 表示 Modbus 寄存器地址其取值范围与设备寄存器地址存在映射关系如下表所示这里我们只简单介绍下地址和存储区下面我们会详细展开。3. 虚拟串口软件3.1 软件简介虚拟串口工具可以创建2个互联的串口如下图所示比如Modbus Poll工具使用COM1发送数据给COM2Modbus Slave从COM2读到数据。使用虚拟串口就可以不使用开发板也可以体验Modbus Poll、Modbus Slave。3.2 虚拟串口的使用安装后运行虚拟串口程序“Virtual Serial Port Tools”安装下图创建2个串口打开设备管理器可以看到如下串口4. Modbus Poll 与 Modbus Slave 互联/通下面我们进行Modbus Poll 与 Modbus Slave互联互通实验通过形象直观的方式展示Modbus 数据流根据前面的设定我们已将知道了如何运用 Modbus 学习必备三件套下面我们就通过三件套来进行实验首先打开VSPD虚拟串口软件设置虚拟串口我这里就以上面设订COM1,COM2为例接下来我们再来配置我们的Modbus Poll 与 Modbus Slave。我们首先打开Modbus Slave端设置连接连接方式我们选择Serial Port串口连接选择我们设置的串口COM1,模式选择RTU模式如下图所示Modbus Slave 连接设定在设置参数从机地址我们设定 1你也可以自己随意设定Function 项我们选择03 Holding Register(4x)地址类型我们选择 DEC十进制格式Address首地址我们设置为0访问寄存器数量设置为10如下图所示Modbus Slave 参数设定接下来我们再来设置Modbus Poll端设置方法也是和Modbus Slave端一一对应的连接设定参数设定如下图所示Modbus Poll 连接设定注意这里串口要选择我们设定的COM2,其它串口参数必须一一对应。Modbus Poll 参数设定设置好后我们主设备和从设备分别连接了我们设置的 COM1COM2这样我们便可观察当前寄存器的读取情况。我们双击Modbus Poll主设备端地址中的0值便可打开值设置窗口如下图所示修改值为66点击Send打开Modbus Slave从设备端便可发现也做出了改变如下图所示我们还可以打开Modbus Poll点击Display选择Commuaction查看发送的报文TX 是我们主站发送的报文RX是从站返回的报文。