Modbus在算盘上的连接
背景
Modbus 是一种工业协议,于 1979 年开发,旨在实现自动化设备之间的通信。 Modbus 最初是作为通过串行层传输数据的应用级协议实现的,现已扩展到包括通过串行、TCP/ IP 和用户数据报协议(UDP)的实现。
Modbus 具有以下几个优势:
- 标准、开放,用户可以免费、放心地使用 Modbus 协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持 Modbus 的厂家超过400家,支持 Modbus 的产品超过600种。
- Modbus 可以支持多种电气接口,如 RS-232、RS-485 等,还可以在各种介质上传送,如双绞线、光纤、无线等。
- Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。 标准的 Modbus 口是使用 RS-232-C 兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由 Modem 组网。
Modbus 是一个开放的架构,支持各种操作系统。目前在 linux 环境下进行开发,通过 TCPIP/USB 串行适配器和外部进行通讯。通过实现一个 Modbus 核心协议栈,来完成 Modbus 的接口开发。根据 Modbus 的特性,它的协议数据接口有下述的定义:
Modbus 协议是一个 master/slave 架构的协议。有一个节点是 master 节点,其他使用 Modbus 协议参与通信的节点是 slave 节点。每一个 slave 设备都有一个唯一的地址。slave 一般是硬件设备。
对于 Modbus TCP 而言,主站通常称为 Client,从站称为 Server;而对于 Modbus RTU 和 Modbus ASCII 来说,主站是 Master,从站是 Slave。
MODBUS RTU 报文格式:
起始位 | 设备地址 | 功能代码 | 数据 | CRC校验 | 结束符 |
---|---|---|---|---|---|
T1-T2-T3-T4 | 8Bit | 8Bit | n个8Bit | 16Bit | T1-T2-T3-T4 |
MODBUS ASCII 报文格式:
起始位 | 设备地址 | 功能代码 | 数据 | LRC校验 | 结束符 |
---|---|---|---|---|---|
1个字符 | 2个字符 | 2个字符 | n个字符 | 2个字符 | 2个字符 |
MODBUS TCP 报文:
交互标识 | 协议标识 | 报文长度 | 设备标识 | 功能代码 | 数据 |
---|---|---|---|---|---|
2字节 一般为0 | 2字节 一般为0 | 2字节 高字节在前 | 1字节 也就是设备地址 | 1个字符 | n个字符 |
可以看到 Modbus 是基于 TCPIP 或者串行接口上的数据结构。从硬件层来说可以确定是经过 Ethernet 接口和串行接口卡。从 Modbus 的协议数据中看到的特征包含设备地址,功能码,和应用数据。用户可以从 Modbus 中读取一个或者多个数据。
Modbus 常用的的功能码如下表所示:
功能码 | 名称 | 作用 | |
---|---|---|---|
01 | 读取线圈状态 | 取得一组逻辑线圈的当前状态(ON/OFF) | |
02 | 读取输入状态 | 取得一组开关输入的当前状态(ON/OFF) | |
03 | 读取保持寄存器 | 在一个或多个保持寄存器中取得当前的二进制值 | |
04 | 读取输入寄存器 | 在一个或多个输入寄存器中取得当前的二进制值 | |
05 | 强置单线圈 | 强置一个逻辑线圈的通断状态 | |
06 | 预置单寄存器 | 把具体二进值装入一个保持寄存器 | |
15 | 强置多线圈 | 强置一串连续逻辑线圈的通断 | |
16 | 预置多寄存器 | 把具体的二进制值装入一串连续的保持寄存器 |
功能描述
支持从 Modbus TCP 和 RTU 设备中采集数据,并且定期读取点位,得到点位的值,并且输出。
支持数据通过网络(MQTT 和 Websocket)转发。
支持查看 Modbus 使用中产生的设备日志。
支持导入导出 Modbus 的点位表。
支持多 Modbus 设备的同时连接。
测试平台搭建
使用 Modbus Slave 作为对接的测试软件,并且设置好端口,运行,这里监听在 9001 端口上。
测试流程
在算盘Link组件后面板点击打开网页的按钮,可以打开用户界面的数据接入模块,如图所示。
添加通道
点击新建通道按钮,填写通道的名称:
添加成功之后会在左侧栏目中显示,这里会显示已连接的状态:
添加设备
选择通道点击添加设备按钮,弹出一个对话框,填写正确的服务器地址和名称,然后点击确认。
添加成功之后,可以在左侧看到一个测试设备,并且在状态栏里面显示设备已经连接。
添加变量
点击新增点位,会弹出一个对话框。按照如图所示填写,并且确认。
可以看到点位列表里面显示了新的一个数据项。
点击导出点位表按钮,可以得到一个excel文件:
可以看到导出的excel表格只有一行数据,编辑这个表格,扩展出多行数据,然后导入。
可以看到用户配置的点位变得更加的丰富: