4380|4

76

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

一种历史告警功能的实现——基于拓普微Lua脚本实现 [复制链接]

本帖最后由 慈俭不敢为人先 于 2022-4-20 10:17 编辑

一种历史告警功能的实现——基于【拓普微】Lua脚本实现

一、应用背景

该应用适用于拓普微智能显示模块Modbus主机系列支持的产品,介绍并实现通过Lua脚本设计历史告警信息提示的功能。

 

二、设计实现

1、工程准备

     1-1、硬件平台:拓普微智能显示模块HKT070DMC-2C ;

     1-2、软件平台:SGTools;

     1-3、UI素材:该案例工程所使用的背景图及图标素材;

     1-4、功能目标: Modbus协议,监测故障事件寄存器(保持寄存器类型)每个位的变化,模块实现告警信息反馈与信息显示。事件表如下:

 2、工程实现

     2-1、工程条件与资源:

     ①打开SGTools新建工程,工程分辨率“800x480”,设备型号“HKT070DMC-2C” ②导入页面背景图DI0000、DI0001;创建10个字符串变量资源“0x000080~0x000500” 。

     2-2、页面控件设置:

     ①进入页面PG0000关联导入的背景图DI0000,再新建10个字符串控件,依次关联字符串变量“0x000080~0x000500”。用以显示故障事件的信息。②新建2个触摸键控件,参数设置略。使用Lua改写实现上翻下翻查找事件信息功能。具体页面设置如下图2-1

2-3、Modbus通信协议设置

     从RGTools的菜单栏中依次点击“工具”然后选择“Modbus产品脚本编辑器”打开编辑器如下图2-2,新建1条地址映射关系与1条逻辑处理关系。

     ①地址映射“Relative[0x080000,4x:0x0000],vplen[1],mblen[1],slaveID[1]”

     功能:将1个16位的屏变量“0x080000”映射1个从机ID为“1”的保持寄存器地址“0x0000”。此例中映射的保存寄存器为“0x0000”也可根据需要映射别的地址或类型。

     ②逻辑处理“Read,if(always),mbAddr[4x:0x0000],mblen[1],slaveID[1],vplen[1]” 

     功能:模块上电一直读取1个从机ID为“1”的保持寄存器地址“0x0000”。该保持寄存器为故障事件监测寄存器,16个位对应不同类型的事件; Lua程序中监测到该保持寄存器发生变化时,产生事件信息并刷新字符串控件中的信息显示。

     ③编辑完成后,依次点击“保存”“编译”按钮生成Modbus.xml文件信息。  

2-4、Lua脚本程序设计

     智能模块HKT070DMC-2C支持Lua脚本程序扩展,关于Lua的具体编程语法及标准库函数可以参考官方手册,“hmt”库函数的使用说明请查看手册“SMART LCD Lua Functions Reference”。

     可以通过点击RGTools资源栏下方的“Lua”标识,右键“添加文件”方式导入Lua脚本。历史告警信息的功能详细设计实现参考以下Lua程序:

--定义全局变量
Problem_Type = {"模块01故障", "模块01通讯故障", "模块02故障", "模块02通讯故障", "模块负载", "PCC开关异常", "闸门开关异常", "电压相位错误", "RTC电池负荷异常", "RTC电池超负荷", "BMC通讯故障", "网络连接异常", "DC散热器过温", "AC散热器过温", "电源欠压", "电源过压"}
Problem_Information = {}

--定义状态
_getinformationTostr = 0
_writevpstrmode = 0
ConIndex = 0
-----------------------------------

--初始化
staticvalue = hmt.readvp16(0x080000)

--SYSRunningTime = hmt.gettick()

--函数定义-----------------------------------------------------------

--事件信息生成函数

function _GetInformation(Value)

  local YEAR  = hmt.readvpreg(0xFFFF10)
  local MONTH = hmt.readvpreg(0xFFFF11)
  local DAY   = hmt.readvpreg(0xFFFF12)
  local HOUR  = hmt.readvpreg(0xFFFF13)
  local MINUTE = hmt.readvpreg(0xFFFF14)
  local SECOND = hmt.readvpreg(0xFFFF15)

  local _Date = string.format("%02d/%02d/%02d   %02d:%02d:%02d", YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
  local infor_Data = ""

  for i = 1, 16 do
    if(((Value >> (i-1)) % 2) == 1)then
      infor_Data = string.format("%s   %s", _Date, Problem_Type)
	  for j =1, 19 do
        Problem_Information[21 - j] = Problem_Information[20 - j]
      end
      Problem_Information[1] = infor_Data
    end
  end

end

---------------------------------------------------------------------


----------------------------------------------------------
-----函数名称:    主循环函数
-----函数功能:    上电循环执行,周期10ms
-----输入参数:    无
-----返回值  :
----------------------------------------------------------
luamain = function(void)
  local TYPEValue = hmt.readvp16(0x080000)

  if(TYPEValue ~= staticvalue)then
    staticvalue = TYPEValue
    _getinformationTostr = 1

  end

  if(_getinformationTostr == 1)then
    _GetInformation(TYPEValue)
	for i = 1, 10 do
	  hmt.writevpstr((0x00 + (i*0x80)), Problem_Information)
	end
	ConIndex = 0
	_getinformationTostr = 0
  end

  if(_writevpstrmode == 1)then
    for j = 1, 10 do
	  hmt.writevpstr((j*0x80), Problem_Information[j + ConIndex])
	end
	_writevpstrmode = 0
  end

  return 0
end

----------------------------------------------------------
-----函数名称:    触摸键回调函数
-----函数功能:
-----输入参数:    无
-----返回值  :
----------------------------------------------------------

tpkhook = function(page, id, state)

  if(page == 0)then
    if((id == 0) and (state == 0))then
	  ConIndex = ConIndex + 1
	  if(ConIndex > (#Problem_Information - 1))then
	    ConIndex = (#Problem_Information - 1)
	  end
	  _writevpstrmode = 1
	end
	if((id == 1) and (state == 0))then
	  ConIndex = ConIndex - 1
	  if(ConIndex < 0)then
	    ConIndex = 0
	  end
	  _writevpstrmode = 1
	end
  end

  return 0
end

pagechangehook = function(pageid)

  return 0
end

、应用测试

测试一:(置监视地址bit2为1)如图

表中对应触发告警信息“模块02故障”以及对应日期

 

 测试二:(置监视地址bit5为1)如图

 表中对应触发告警信息“PCC开关异常”以及对应日期

 

 测试三:其他测试效果

 

 

最新回复

HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀   详情 回复 发表于 2022-4-24 19:51
点赞(1) 关注
 

回复
举报

2549

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

有没有一下简单的Lua脚本分享,方便初学者使用

点评

好的,我整理一些下次可以分享出来  详情 回复 发表于 2022-4-22 11:48
 
 

回复

76

帖子

2

TA的资源

一粒金砂(中级)

板凳
 
数码小叶 发表于 2022-4-20 13:54 有没有一下简单的Lua脚本分享,方便初学者使用

好的,我整理一些下次可以分享出来

 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

4
 

HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀

点评

是的,modbus主机协议通信,屏幕分辨率800x480的  详情 回复 发表于 2022-4-26 16:16
 
 

回复

76

帖子

2

TA的资源

一粒金砂(中级)

5
 
echo_xpout 发表于 2022-4-24 19:51 HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀

是的,modbus主机协议通信,屏幕分辨率800x480的

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表