振弦采集模块UART 通讯协议
UART 接口支持标准的工业 MODBUS 通讯协议( 03、 04、 06、 16 指令码)和自定义的简单 AABB协议以及$字符串指令集。 前两种协议均支持基于模块地址和总线连接的一主多从应用结构, 在总线中, VMXXX 模块始终作为从机使用( 被动等待指令, 不主动上传数据,但“ 自动上传数据”和“ 软件握手” 除外, 详见后续对应章节说明)。
建议使用专用的 VMTool 工具进行寄存器指令的生成和测试,关于 VMTool 的基本用法,请详见“ 第四章:参数配置工具的使用” 。根据下述通讯协议规则,读写寄存器。在使用 MODBUS 或 AABB 通讯协议时, 请确认模块的软件握手参数处于关闭状态(默认)。
(一) MODBUS 通讯协议
在 MODBUS 协议下, VMXXX 内部所有寄存器被定义为“ 保持寄存器” (详见 MODBUS 通讯协议标准说明),模块支持基于 MODBUS 协议的多个连续寄存器读取、单个寄存器写入、多个连续寄存器写入三种指令, 对应指令码分别为 0x03(或 0x04)、 0x06、 0x10。 下面逐一说明每种指令码的指令和返回数据帧格式。
( 1) 03/04( 0x03/0x04) 指令码: 读取多个连续的寄存器数据,指令格式如下
指令数据帧结构
例:读取地址为 0x01 的模块寄存器值,寄存器开始地址为 0,连续读取 10 个寄存器
主机发送指令: 0x01 0x03 0x00 0x00 0x00 0x0A 0xC5 0xCD
从机返回应答: 0x01 0x03 0x14 0x00 0x01 0x00 0x60 0x00 0x00 0x00 0x00 0x00 0x000x00 0x01 0x01 0xF4 0x00 0x00 0x00 0x64 0x00 0xC8 0x5F 0x8F(下划线为读取到的 10 个寄存器值)
主机发送指令: 0x01 0x04 0x00 0x00 0x00 0x0A 0x70 0x0D
从机返回应答: 0x01 0x04 0x14 0x00 0x01 0x00 0x60 0x00 0x00 0x00 0x00 0x00 0x000x00 0x01 0x01 0xF4 0x00 0x00 0x00 0x14 0x14 0xC8 0xB7 0x62(下划线为读取到的 10 个寄存器值)
读取多个连续寄存器时, 单次读取不要超过 64 个寄存器, 不要试图读取不存在的寄存器( 地址大于 63 的寄存器)。
( 2) 06( 0x06) 指令码: 修改单个寄存器的值, 指令格式如下
例: 将地址为 0x01 的模块中的寄存器 8 的值修改为 100
主机发送指令: 0x01 0x06 0x00 0x08 0x00 0x64 0x09 0xE3
从机返回应答: 0x01 0x06 0x00 0x08 0x00 0x64 0x09 0xE3
( 3) 16( 0x10) 指令码: 修改连续的多个寄存器的值, 指令格式如下
例:修改地址为 0x01 的模块中 0~31 寄存器的值
主机发送指令( 16 进制指令): 01 10 00 00 00 20 40 00 01 00 60 00 00 00 03 00 00 00 01 01 F4 00 00 00 C8 C8 C8 00 01 82 35 00 05 03 E8 00 A0 05 DC 06 40 00 05 00 64 00 00 00 0A 00 0A 00 04 01 77 03 15 00 00 00 00 03 E8 00 01 00 00 00 00 00 00 A3 70(下划线数据为 32 个寄存器值)
从机返回应答: 0x01 0x10 0x00 0x00 0x00 0x20 0xXX 0xXX VMXXX 的 UART 接收缓存为 80 字节,向模块发送多寄存器写指令时,单帧指令长度不要超限。