首页 理论教育 ASCII码转换-STOD/DTOS和STOR/RTOS编程

ASCII码转换-STOD/DTOS和STOR/RTOS编程

时间:2023-10-26 理论教育 版权反馈
【摘要】:较晚版本的Logix控制器关于ASCII码的处理增加了一些指令,其中就包括了STOD和DTOS这两条指令。STOD是将字符串转为双整字,DTOS则将双整字转为字符串。首先,例程扫描之初清除ASCII码缓冲区和日期时间数组的指针。图8-31 将控制器日期时间转换成ASCⅡ码只截取了日期时间数据结构标签的前6个数据,转换指令DTOS分别将日期时间结构数据标签的子元素年、月、日、时、分、秒的双整字转为ASCII码数据。

ASCII码转换-STOD/DTOS和STOR/RTOS编程

ASCII码的信息载体比起BCD码组件是更进了一步,至少脱离了信号传送的模式。ASCII码是来自于通信设备的数据串,通常是第三方ASCII设备通过标准通信口串口跟控制器来交换数字,常见的设备如条形码阅读器。

经过串口读写处理的ASCII码字符串的数字放置在数据库中,也许因为ASCII码每个数字占用了一个字节,不能直接译读,也许从串口获取的过程足够复杂印象深刻,人们对ASCII采集来的字符数据似乎不大容易被混淆为数字,而是很认真地想转换为数字。过去,这曾是很麻烦的一件事,需要编制一段较为复杂的梯级逻辑去解决转换问题。

较晚版本的Logix控制器关于ASCII码的处理增加了一些指令,其中就包括了STOD和DTOS这两条指令。STOD是将字符串转为双整字,DTOS则将双整字转为字符串。现在,将数字的ASCII码字符串转为我们要运算的数据,或将运算好的数据转为要传送的数字ASCII码字符串已经变得非常简单容易了。

这里字符串是可定义长度的(用户自定义),一串数字ASCII码转换后,一个双整字就可以表达了;一个双整字转换成字符串后,却变为一串字符串代码。编写梯级逻辑如图8-29所示,控制器运行后结果可直接在指令参数上观察。正如我们在指令参数中看到的那样,ASCII码的显示总是加上引号来区分,这样更不容易被误读了。

下面我们摘取一段关于串口读取ASCII码数据梯级逻辑处理的实例,串口连接的是一台条形码扫描仪,其读到的数据是ASCII码字符串的表达形式,要将这个读入的数据转为可运算的数值。编写梯级逻辑如图8-30所示。

我们来解读这一段梯级逻辑。首先,ABL指令测试数据缓存区,一旦找到数据,其找到位FD置位,为避免读行指令ARL被悬挂太久,占用了ASCII队列的空间,令ABL指令的找到位作为ARL指令执行的梯级条件,读行指令ARL读取缓存区字符串数据,遇终止符$r而停止(终止符在控制器串口组态中设置),从而获取字符串‘7.49263763$r’,读行指令ARL空置位ASCII_Read_Line.EM的状态作为下一步操作的梯级条件,下一步使用查找字符串指令FIND来找到所指定的内容,本条指令指定的是字符串中的终止符,位于位置0,然后用删除指令DELETE删除指定的内容,最后使用ASCII码转换数据的指令STOR将其转换为实数,该实数被送到模拟量输出模块结构数据的通道0数据,并通过D/A转换送到输出模块的信号通道。

978-7-111-36030-8-Chapter08-30.jpg

图8-29 ASCⅡ码和数字的互转

978-7-111-36030-8-Chapter08-31.jpg

图8-30 ASCⅡ码转为数字的处理

经过以上梯级逻辑的处理,一个来自于ASCII码设备的ASCII码字符串通过串口进入控制器,转换为可运算的数据,最终作为一个模拟量输出模块的控制信号送出,实施了外部设备的控制。

再举一个关于ASCII数据处理的实例,假定要将控制器系统的一段日期时间记录数据传送到连接在控制器串口的外部ASCII码设备中,为完成日期时间记录数组的转换和传送的操作,编写梯级逻辑如图8-31所示,这里使用的是数据转为字符串的DTOS指令。

首先,例程扫描之初清除ASCII码缓冲区和日期时间数组的指针。(www.xing528.com)

将日期时间数组指针所指单元的数据复制到缓存区DateTime_Buffer,这是一个通过GSV指令从控制器系统读取的日期时间结构数据标签,结构为7个双整字,分别是年、月、日、时、分、秒、毫秒,此处只复制了一个数据标签待处理。

978-7-111-36030-8-Chapter08-32.jpg

图8-31 将控制器日期时间转换成ASCⅡ码

只截取了日期时间数据结构标签的前6个数据,转换指令DTOS分别将日期时间结构数据标签的子元素年、月、日、时、分、秒的双整字转为ASCII码数据。使用字符串连接指令

978-7-111-36030-8-Chapter08-33.jpg

图8-31 将控制器日期时间转换成ASCⅡ码(续)

978-7-111-36030-8-Chapter08-34.jpg

图8-31 将控制器日期时间转换成ASCⅡ码(续)

978-7-111-36030-8-Chapter08-35.jpg

图8-31 将控制器日期时间转换成ASCⅡ码(续)

CONCAT将日期一一连接起来,并加入连接符斜杠,以终止符$t结尾;再次使用字符串连接指令CONCAT将时间一一连接起来,并加入连接符冒号;最后使用CONCAT指令将日期和时间的ASCII码字符串接起来。

将处理好的字符串用字符串写指令AWT送到控制器串口,与此同时,修改日期时间数组的指针准备转换下一个日期时间数组元素。此段梯级逻辑为一条日期时间记录的处理,一批日期时间的处理,还需编写其他的梯级逻辑予以处理。如果采用Add_On指令来处理,不失为一个简洁快速的办法,后续的Add_On指令的章节中我们再讨论。

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

我要反馈