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

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

2. 图形命令列表
| Command | 数据段格式 | example |
|---|---|---|
| 画点(0x0001) | X,Y,颜色 | AA55 00 0F F1 2000 0001 0001 01F4 00F0 F800 FF00 CCCC(红点 500,240) |
| 端点连线(0x0002) | Quantity,各点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 |
| Image(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) | Quantity,颜色,Xn,Yn 对 | AA55 00 33 F1 2000 0009 0005 F800 0168 0064 0064 ... FF00 CCCC(5 条垂线) |
| 线段(0x000A) | Quantity,颜色,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 View:编译后 private 资源包里有 image.bin;PIC ID 对照打开工程目录下 build/image.xml(id=0 对应画面0背景图)。

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 }
-- 画点: Command, 点数, X, Y, 颜色, End
local 데이터 = {baseGraphCmd.opint, 0x0003,
0x01F4, 0x00F0, 0xF800, 0x01F5, 0x00F1, 0xF800, 0x01F6, 0x00F3, 0xF800,
0xFF00}
set_array(VT_LW, 0x2000, 데이터) -- 单条模式地址 0x2000多条模式把多个图形命令按顺序放进一个数组一次写入(주소 0x3000);叠加模式不清屏直接追加(주소 0x4000)。



整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)组态控件教程「动态绘图」,版权归大彩科技所有。
Leave a Reply