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

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和검색引流。

动态绘图控件让你在 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. 图形命令列表

命令데이터段格式示例
画点(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,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)数量,颜色,Xn,Yn 对AA55 00 33 F1 2000 0009 0005 F800 0168 0064 0064 ... FF00 CCCC(5 条垂线)
线段(0x000A)数量,颜色,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 查看:编译后 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 }
-- 画点: 命令, 点数, X, Y, 颜色, 종료
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)组态控件教程「动态绘图」,版权归大彩科技所有。

把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 검증和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的邮箱주소不会被公开。 必填项已用 * 标注