📦 不同控件的帧格式
DGUS 帧结构是 固定头 + 可变数据,控件不同,数据长度也不同:
5A A5 [长度] [命令] [地址2字节] [数据区...变长]
🔢 三类常用控件对比
| 控件 | 命令 | 方向 | 帧格式 | 数据量 |
|---|---|---|---|---|
| 按键返回 | 83 | 屏→STC | 5A A5 06 83 VP VP 01 KEY KEY |
固定1字 |
| 变量图标 | 82 | STC→屏 | 5A A5 05 82 VP VP VAL VAL |
固定1字 |
| 写多变量 | 82 | STC→屏 | 5A A5 07 82 VP VP 02 V1 V1 V2 V2 |
N字可变 |
数据量 = buf[2] - 1(总长减去命令字节1)
举例:
按键返回: buf[2]=06 → 数据量=5 → 地址(2) + 字数(1) + 数据(2) = 5 ✓
写单变量: buf[2]=05 → 数据量=4 → 地址(2) + 数据(2) = 4 ✓
写双变量: buf[2]=07 → 数据量=6 → 地址(2) + 数据(2) + 数据(2) = 6 ✓
📐 怎么知道某个控件占多少字节?
看 DGUS Tool 里的控件属性面板:
DGUS Tool → 选中控件 → 右侧属性栏:
┌─────────────────────┐
│ 变量地址: 0x2001 │ ← 地址
│ 变量类型: unsigned int │ ← 1字
│ 键值: 0x0002 │ ← 返回的数据内容
└─────────────────────┘
| 变量类型 | 字节数 | 说明 |
|---|---|---|
unsigned char |
1字节 (半字) | 少见 |
unsigned int |
2字节 (1字) | 最常用 |
unsigned long |
4字节 (2字) | 大数值 |
string |
N字节 | 文本 |
🧠 不用死记,规律很简单
buf[2] = 从命令到帧尾的总字节数
总长度 = buf[2] = 1(命令) + 2(地址) + 字数(1,仅83) + N×2(数据)
83 固定公式: buf[2] = 1 + 2 + 1 + (字数 × 2)
命令 地址 字计数 数据
82 固定公式: buf[2] = 1 + 2 + (字数 × 2)
命令 地址 数据
你配置 DGUS Tool 时,变量类型选的就是字数,工具会自动按这个协议发帧——你只需要在 STC 端按上面公式解析即可。