VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

动态绘图控件让你在 HMI 上创建和修改图形元素(点、线、圆、矩形、封闭图形、图片裁剪),像一个绘图板。核心机制:通过一段连续寄存器写入绘图命令——PLC 或 LUA 都能画。

1. 属性介绍

属性说明
数据地址绘图命令写入地址
线条粗细线段宽度像素 1~4
命令模式单条(单次写一个命令)/ 多条(单次写多个命令)
绘图模式重绘(新指令先刷新旧图)/ 叠加(在画面上继续添加)
画布颜色RGB 颜色
完成通知绘图完成后指令清零并通知

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图

连续寄存器格式

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

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图1

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,YAA55 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,YnEAA55 00 33 F1 2000 000A 0004 ... FF00 CCCC
矩形反色(0x000D)左上,右下,颜色(反色=0xFFFF-颜色)AA55 00 15 F1 2000 000D 0001 0168 00E6 0190 010E 49F1 FF00 CCCC

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图2

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

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图3

封闭区域填充的坑:要两个动态绘图控件——一个画封闭图形(如 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 }
-- 画点: 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 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图4

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图5

VisualHMI 动态绘图:连续寄存器绘图命令、LUA set_array 与封闭填充插图6

三种模式选型:单条=一次画一个图形(重绘),多条=一次画多个图形(重绘),叠加=不清屏连续画。做趋势/频谱这种动态刷新用重绘,做流程示意图这种累积显示用叠加。

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

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC 검증 and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email 주소 will not be published. Required fields are marked *.