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)구성(SCADA)控件튜토리얼「动态绘图」,版权归大彩科技所有。

실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注