本文目录
- 1. 1. 属性介绍
- 2. 2. 图形命令列表
- 3. 3. LUA 绘图(set_array)
动态绘图控件让你在 HMI 上创建和修改图形元素(点、线、圆、矩形、封闭图形、图片裁剪),像一个绘图板。核心机制:通过一段连续寄存器写入绘图命令——PLC 或 LUA 都能画。
1. 属性介绍
| 属性 | 说明 |
|---|---|
| 数据地址 | 绘图命令写入地址 |
| 线条粗细 | 线段宽度像素 1~4 |
| 命令模式 | 单条(单次写一个命令)/ 多条(单次写多个命令) |
| 绘图模式 | 重绘(新指令先刷新旧图)/ 叠加(在画面上继续添加) |
| 画布颜色 | RGB 颜色 |
| 完成通知 | 绘图完成后指令清零并通知 |

连续寄存器格式:
LW CMD 绘制图形类型 LW+1 Draw_Cnt 数据包数量(一个矩形=1个包) LW+2 DATA N 个字节数据段 LW+1+N END 结束字段,固定 0xFF00

2. 图形命令列表
| 命令 | 数据段格式 | 示例 |
|---|---|---|
| 画点(0x0001) | X,Y,颜色 | AA55 00 0F F1 2000 0001 0001 01F4 00F0 F800 FF00 CCCC(红点 500,240) |
| 端点连线(0x0002) | 数量,各点X,Y(连成线),颜色列表 | AA55 00 1D F1 2000 0002 0003 FFFF 012C 012C 01F4 012C 01F4 0064 02BC 0064 FF00 CCCC |
| 矩形(0x0003) | 左上X,Y,右下X,Y,颜色(每矩形) | AA55 00 1F F1 2000 0003 0002 011E 00AA 01AA 010A 471A 0258 0064 02BC 012C 2C4A FF00 CCCC(两个矩形) |
| 矩形填充(0x0004) | 同上 | AA55 00 1F F1 2000 0004 0002 … FF00 CCCC |
| 圆形(0x0005) | 圆心X,Y,半径,颜色 | AA55 00 13 F1 2000 0005 0001 01F4 00FA 0096 FEA0 FF00 CCCC |
| 圆形填充(命令码同为 0x0005,源文未区分标志位) | 同上 | AA55 00 13 F1 2000 0005 0001 0200 0100 0085 FEAA FF00 CCCC |
| 图片(0x0007) | PIC ID,裁剪左上X,Y,右下X,Y,目标X,Y | AA55 00 19 F1 2000 0007 0001 0000 0021 0027 00A3 0040 0168 0168 FF00 CCCC |
| 封闭区域填充(0x0008) | X,Y,颜色 | AA 55 00 11 F1 1001 0008 0001 01A4 00F6 F800 FF00 CCCC |
| 频谱(0x0009) | 数量,颜色,Xn,Yn 对 | AA55 00 33 F1 2000 0009 0005 F800 0168 0064 0064 … FF00 CCCC(5 条垂线) |
| 线段(0x000A) | 数量,颜色,XnS,YnS,XnE,YnE | AA55 00 33 F1 2000 000A 0004 … FF00 CCCC |
| 矩形反色(0x000D) | 左上,右下,颜色(反色=0xFFFF-颜色) | AA55 00 15 F1 2000 000D 0001 0168 00E6 0190 010E 49F1 FF00 CCCC |

PIC ID 查看:编译后 private 资源包里有 image.bin;PIC ID 对照打开工程目录下 build/image.xml(id=0 对应画面0背景图)。

封闭区域填充的坑:要两个动态绘图控件——一个画封闭图形(如 0x2000),一个设填充色(如 0x1001,CMD=0x0008),且设填充色的控件必须层叠在画封闭图形的控件上层;画面背景必须纯色,否则无法正常填充。
3. LUA 绘图(set_array)
LUA 里用 set_array() 写连续寄存器实现绘图。以 on_update 触发为例(字设置按钮写 0xF000 的值 1~13 切换图形):
baseGraphCmd = {
opint=0x0001, Connection=0x0002, rect=0x0003, rectFill=0x0004,
circle=0x0005, PIC=0x0006, ICON=0x0007, fill=0x0008,
Spectrum=0x0009, line=0x000A, rectFillOr=0x000D }
-- 画点: 命令, 点数, X, Y, 颜色, 结束
local data = {baseGraphCmd.opint, 0x0003,
0x01F4, 0x00F0, 0xF800, 0x01F5, 0x00F1, 0xF800, 0x01F6, 0x00F3, 0xF800,
0xFF00}
set_array(VT_LW, 0x2000, data) -- 单条模式地址 0x2000
多条模式把多个图形命令按顺序放进一个数组一次写入(地址 0x3000);叠加模式不清屏直接追加(地址 0x4000)。



三种模式选型:单条=一次画一个图形(重绘),多条=一次画多个图形(重绘),叠加=不清屏连续画。做趋势/频谱这种动态刷新用重绘,做流程示意图这种累积显示用叠加。
整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)组态控件教程「动态绘图」,版权归大彩科技所有。
发表回复