首页 理论教育 PAC编程实例:将信息处理转化为Add-On指令

PAC编程实例:将信息处理转化为Add-On指令

时间:2023-10-26 理论教育 版权反馈
【摘要】:图15-37 创建Add-On指令GET_ASCII_DATE_TIME根据需求,创建将要带入GET_ASCII_DATE_TIME指令的记录系统日期时间数组,此数组为用户自定义数据结构的数组,转换后带出的ASCII码数组为字符串数组,如图15-38所示。图15-39 创建本地标签GET_ASCII_DATE_TIME指令每次只能转换一条记录,要编写循环执行的梯级逻辑来操作。根据Add-On指令的执行规则,Array_Record_DateTime[Get_ASCII_Index]复制给GET_ASCII-DATE_TIME指令的后台数据Re-cord_DateTime;GET_ASCII_DATE_TIME指令的后台数据ASCII_DateTime复制给Array-ASCIIDateTime[Get_ASCII_Index]。

PAC编程实例:将信息处理转化为Add-On指令

我们再来看一个实例处理,记录事件发生系统日期时间的一个数组,需要转换为ASCII数组送到外部ASCII设备,编程进行转换的大量重复操作。首先创建Add_On指令GET_ASCII_DATE_TIME,如图15-37所示。

978-7-111-36030-8-Chapter15-47.jpg

图15-37 创建Add-On指令GET_ASCII_DATE_TIME

根据需求,创建将要带入GET_ASCII_DATE_TIME指令的记录系统日期时间数组,此数组为用户自定义数据结构的数组,转换后带出的ASCII码数组为字符串数组,如图15-38所示。

978-7-111-36030-8-Chapter15-48.jpg

图15-38 创建指令参数

根据需求,创建本地标签,这些均为梯级逻辑运行所需要的中间变量,和我们之前在第8章传送和转换指令的编程中讨论过的类似,并在ASCII_Colon、ASCII_CRLF、ASCII_Slash、ASCII_Tab 4个标签中设置相应的默认值,即某些符号或后缀,如图15-39所示。

在Logic例程中编写相关的转换处理梯级逻辑,如图15-40所示,首先将记录日期时间Record_DateTime复制至缓冲单元DateTime_Buffer,分别对日期的年、月、日和时间的时、分、秒进行相应的转换,获得对应的6个ASCII码。将日期连接起来,再将时间连接起来,拼接为ASCII_DateTime字符串作为最后的输出。

978-7-111-36030-8-Chapter15-49.jpg

图15-39 创建本地标签

GET_ASCII_DATE_TIME指令每次只能转换一条记录,要编写循环执行的梯级逻辑来操作。在运行的例程中编写梯级逻辑如图15-41所示,当Get_ASCII为0,设定的梯级条件成立,Go_On跳转到后面梯级,不执行GET_ASCII_DATE_TIME指令;当Get_ASCII为1,设定的梯级条件不成立,进入GET_ASCII_DATE_TIME指令的跳转循环执行,直到50个元素转换完毕,获得了转换的结果。

用跳转指令来完成这个50个元素的循环操作,当进入循环时,将指针Get_ASCII_Index清除为0,完成GET_ASCII_DATE_TIME指令对数组0元素的操作,这一次操作后,指针加1,经过比较指令LEQ的判定,跳回GET_ASCII_DATETIME指令所在梯级继续执行,直到判断指针等于48时,仍然梯级条件成立,跳回GET_ASCII_DATE_TIME指令所在梯级执行第49元素的操作,指针加1后,判断条件不成立,离开循环操作,由此,从0~49的50个元素全部转换完毕。转换的一轮操作完成之后,解锁Get—ASCII,避免再次进入循环,确保每次循环操作获得的是同期数据。

978-7-111-36030-8-Chapter15-50.jpg

图15-40 日期时间转换处理的梯级逻辑(www.xing528.com)

978-7-111-36030-8-Chapter15-51.jpg

图15-40 日期时间转换处理的梯级逻辑(续)

978-7-111-36030-8-Chapter15-52.jpg

图15-40 日期时间转换处理的梯级逻辑(续)

978-7-111-36030-8-Chapter15-53.jpg

图15-41 在例程中编写调用GET_ASCⅡ_DATA_TIME指令的梯级逻辑

GET_ASCII_DATE_TIME指令带入的参数和带出的参数均采用间接寻址,通过Get_ASCII_Index标签的指针作用来修改数组寻址地址。根据Add-On指令的执行规则,Array_Record_DateTime[Get_ASCII_Index]复制给GET_ASCII-DATE_TIME指令的后台数据Re-cord_DateTime;GET_ASCII_DATE_TIME指令的后台数据ASCII_DateTime复制给Array-ASCIIDateTime[Get_ASCII_Index]。

将编写好的测试例程下载到控制器,运行例程后可以查看一下转换的结果,分别截取Array_Record_DateTime数组和Array_ASCIIDateTime数组最前面的两个数据和最后面的两个数据观察,如图15-42和图15-43所示。

978-7-111-36030-8-Chapter15-54.jpg

图15-42 查看最前面的两个数据

978-7-111-36030-8-Chapter15-55.jpg

图15-43 查看最后面的两个数据

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈