VisualHMI 데이터记录控件:record_* API 数值/문자串表格操作

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

데이터记录控件 + record_* API:在 HMI 上维护历史데이터表——数值型(如电压曲线데이터)和문자串型(如操作로그)都能存,配表格控件显示、翻页、时间戳定位。sn 是자료采样通道索引,范围 0~19 共 20 通道,控件데이터来源选「자료采集」的哪个通道,API 就操作哪个。

1. record_* API 总表

函数설명
record_get_count(sn)通道已存记录总条数
record_write_데이터(sn, 데이터)追加一条记录,데이터 为字数组(索引从 1 开始)
record_read_데이터(sn, index)读一条,返回 데이터(索引从 1)和 timestamp(32 位 Unix 秒)
record_modify_데이터(sn, index, 데이터)改一条,index 从 0 开始,须 < record_get_count(sn)
record_write_string(sn, strings)追加문자串记录,필드用分号 ; 分隔
record_read_string(sn, index)读문자串记录,返回 strings 和 timestamp
record_modify_string(sn, index, strings)改문자串记录
record_clear(sn)지우기通道所有记录(数值/문자串都行)

⚠️ 若采样已활성화块주소存储모드,记录不可篡改——modify 会失败。

2. 数值表格案例(추가/修改/읽기/清除/查条数)

자료采集설정:触发采样、记录条数 100、데이터주소 LW2000、UINT16、데이터个数 10、控制주소 LW1001、采样控制주소 LW1002、启动모드 OFF→ON。데이터记录控件:데이터来源「[0]数值数组」、时间逆序、通道数 10、每页 5 行、翻页控制 LW1004、允许翻页 LW1005(只读)、时间戳定位 LW1006(UINT32)、选中行通知 LW1008(UINT32)。5 个버튼写 LW1000,常量 1=추가/2=修改/3=읽기/4=清除/5=读条数。

addByteRatio = 0     -- 累加器,让每次추가的데이터不同

function on_update(slave, vtype, addr)
  if vtype == VT_LW then
    if addr == 0x1100 then              -- 操作버튼
      local key = get_uint16(VT_LW, 0x1100)
      local 데이터Tb = {}
      if key == 1 then                  -- 추가
        addByteRatio = addByteRatio + 1
        for i = 1, 10 do
          데이터Tb[i] = i * addByteRatio  -- 第一次 1..10,第二次 2..20
        end
        record_write_데이터(0, 데이터Tb)
      elseif key == 2 then              -- 修改选中行
        local cnt = record_get_count(0)
        local line = cnt - get_uint32(VT_LW, 0x1105) - 1  -- 逆序表格行映射
        for i = 1, 10 do 데이터Tb[i] = 12345 end
        record_modify_데이터(0, line, 데이터Tb)
      elseif key == 3 then              -- 읽기选中行
        local cnt = record_get_count(0)
        local line = cnt - get_uint32(VT_LW, 0x1105) - 1
        local 데이터, timeUnix = record_read_데이터(0, line)
        local msg = "时间:"..timeUnix.." 데이터:"
        for i = 1, 10 do msg = msg..데이터[i].." " end
        set_string(VT_LW, 0x1160, msg)
      elseif key == 4 then
        record_clear(0)                 -- 清除
      elseif key == 5 then
        set_string(VT_LW, 0x1160, "条数:"..record_get_count(0))
      end
    end
  end
end

逆序表格的行映射:控件时间逆序显示,第 0 行是最新记录。选中行通知给的是显示位置,换算公式 line = cnt - select - 1

3. 문자串表格案例

자료采集:触发采样、记录条数 100、데이터주소 LW3000、STRING、데이터个数 50、控制주소 LW1501、采样控制주소 LW1502、启动모드 OFF→ON。控件:데이터来源「[1]문자串」、문자串表格√、GB CODE、时间顺序(注意和数值案例的逆序不同)、通道数 10、每页 5 行、翻页 LW1201、允许翻页 LW1202、时间戳定位 LW1203、选中行通知 LW1205。5 个버튼写 LW1200。

addStr = 0
function on_update(slave, vtype, addr)
  if vtype == VT_LW and addr == 0x1200 then
    local key = get_uint16(VT_LW, 0x1200)
    if key == 1 then                    -- 추가
      local cnt = record_get_count(1)
      local line = get_uint32(VT_LW, 0x1205)   -- 顺序表格不反转
      if cnt < line - 1 then return end
      addStr = addStr + 10
      local 데이터Str = ""
      for i = 1, 10 do
        데이터Str = 데이터Str.."第"..(addStr - 10 + i).."个;"
      end
      record_write_string(1, 데이터Str)   -- "第1个;...第10个;"
    elseif key == 2 then                -- 修改
      local line = get_uint32(VT_LW, 0x1205)
      record_modify_string(1, line, "change;change;change;change;change;change;change;change;change;change;")
    elseif key == 3 then                -- 읽기
      local line = get_uint32(VT_LW, 0x1205)
      local 데이터Str, timeUnix = record_read_string(1, line)
      set_string(VT_LW, 0x1260, timeUnix..데이터Str)
    elseif key == 4 then
      record_clear(1)
    elseif key == 5 then
      set_string(VT_LW, 0x1260, "条数:"..record_get_count(1))
    end
  end
end

문자串记录用分号 ; 分隔필드,和表格控件분석规则一致。顺序表格选中行不用反转,直接拿 LW1205。

四个坑:①sn 通道号必须和控件데이터来源选的자료采集索引对上②数值记录 데이터 是下标从 1 的数组,别按 C 习惯从 0 开始;③逆序表格行映射要反转(line = cnt - select - 1),顺序表格不用;④块주소存储모드下记录不可 modify,要改데이터别开掉电存储。

整理自 广州大彩科技 VisualHMI 개발문서(hmi-doc.gz-dc.com)LUA 튜토리얼「데이터记录」,版权归大彩科技所有。

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

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

엔지니어 회원

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

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

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

답글 작성

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