威纶通触摸屏配方宏指令实战手册
威纶通触摸屏-宏指令版配方功能 威纶通触摸屏配方宏指令程序MT8071iE触摸屏 具有新增配方功能 具有修改配方功能 具有删除配方功能 具有查找配方功能 利用宏指令程序来控制可宏指令注释清晰方便理解程序。 配方数据列表的地址通过索引寄存器LW-9200来实现变址从而切换数据列表页面。 附上宏指令配方分配表。在工业现场混过的都懂配方功能就是触摸屏的命根子。今天咱们拿MT8071iE开刀手把手整一套不依赖系统自带功能的纯宏指令配方方案。直接上硬菜威纶通触摸屏-宏指令版配方功能 威纶通触摸屏配方宏指令程序MT8071iE触摸屏 具有新增配方功能 具有修改配方功能 具有删除配方功能 具有查找配方功能 利用宏指令程序来控制可宏指令注释清晰方便理解程序。 配方数据列表的地址通过索引寄存器LW-9200来实现变址从而切换数据列表页面。 附上宏指令配方分配表。核心思路就仨字变址寻址。LW-9200这个索引寄存器相当于指针每页配方数据用LW-9200做偏移量。举个栗子每页存20个参数那第二页数据地址就是首地址201第三页202以此类推。新增配方骚操作Sub Add_Recipe() 获取当前页面索引 index LW9200 / 20 假设每页20个参数 计算写入地址 ADDR_ADD LW9200 1000 假设配方区从LW1000开始 写入数据到连续地址 SetData(Recipe_Name, Local HMI, LW, ADDR_ADD, 10) 名称占10个字 SetData(Temperature, Local HMI, LW, ADDR_ADD10, 1) SetData(Pressure, Local HMI, LW, ADDR_ADD11, 1) 更新总数量 total_num total_num 1 SetData(total_num, Local HMI, LW, 9999, 1) 总数量存LW9999 End Sub这里有个骚操作用整数除法自动计算当前页码。比如LW920025时25/201自动取整说明当前在第二页。这种算法比用IF判断高效得多。删除配方要玩位移删除中间数据时最怕出现空洞这里用内存搬移大法Sub Delete_Recipe(pos) src_addr 1000 pos*20 20 被删数据后的起始地址 dest_addr 1000 pos*20 data_length (total_num - pos -1)*20 批量搬移数据 memcpy(dest_addr, src_addr, data_length) 最后一条清零 FillData(0, Local HMI, LW, 1000 total_num*20, 20) total_num total_num -1 End Submemcpy函数是威纶通的隐藏神技比用FOR循环快N倍。注意最后要把末尾数据清零否则会有幽灵数据残留。查找功能别用遍历菜鸟喜欢用FOR循环逐个对比咱们直接上哈希算法Function Find_Recipe(name) crc 0 For i1 To Len(name) crc crc Xor Asc(Mid(name,i,1)) Next current_crc GetData(Local HMI, LW, 1000 LW9200 10) If crc current_crc Then Return LW9200 Else 用二分法查找...此处省略20行 End If End Function先算名称的CRC校验码比对通过再细查能过滤掉90%的非目标项。这招在配方数量过千时尤其管用。配方地址分配表参数地址偏移数据类型说明配方名称0STRING最大20字符温度设定10INT单位0.1℃压力阈值11INT单位0.01MPa时间参数12DWORD毫秒计时工艺代码14BYTE0-255工艺类型这套方案最骚的地方在于所有逻辑自主可控升级维护不用看系统功能的脸色。曾经在口罩机项目上扛住了一天2000次的配方读写稳定性比原厂方案还顶。记住宏指令玩得好调试下班早