继上篇文章所分享的RS数据传送指令和CCD校验码指令,这次我们接着分享同样受数据处理模式标志继电器M8161控制的ASCI指令和HEX指令。
ASCI指令和HEX指令是一对互逆的指令,基于十六进制字符与ASCII码之间的转换。ASCII码,我在之前的文章就有简单的介绍过,在这里再简单提一下。
ASCII码也就是美国信息交换标准代码,它是一组7位(或8位)二进制代码,分别表示0~9的十个代码、大小写字母的52个代码、32个表示各种符号的代码以及34个控制码。而什么字符对应什么ASCII码,我们可以通过查它的编码表得知。例如字符“3”对应的ASCII码为H33,字符“A”对应的ASCII码为H41,这里的3、A是一个字符,而不仅仅是一个数。这就像运动员背后贴的号码布,上面的号码代表的不是数值的大小,而是表示运动员的编号。
另外,十六进制字符(HEX)我就不再解释,相信大家对它也是相当熟悉了。在知道了什么是HEX和ASCII后,我们开始指令的学习分享吧。
▎01 HEX→ASCII转换指令ASCI
ASCI指令的作用是将十六进制字符转换为ASCII码。但为什么要将HEX字符转换为ASCII码呢?这其实是通信的内容,ASCII通信模式是MODBUS通信协议的通信模式之一,简单来说,是指在数据传输过程中所传送的字符用ASCII码表示。至于什么是MODBUS通信协议,咳咳,这通信吧,我上篇文章已经说过了,这是我永远滴痛。
所以,ASCI指令和HEX指令都是用于ASCII通信模式的。即PLC通过ASCI指令将需发送的十六进制数据转换为ASCII码,通过HEX指令将接收到的ASCII码转换为十六进制字符。ASCI指令的编程手册截图如上图15-1所示,和RS指令与CCD指令一样不可用于32位,有连续执行型和脉冲执行型两种。
其梯形图形式如上图15-2所示,和CCD指令非常相似,也有3个操作数,源址S为HEX字符或存储字元件首址;终址D为ASCII码存储字元件首地址;n为需转换的HEX字符的个数,取值范围为1~256。当驱动条件成立时,将源址S的n个十六进制字符转换为ASCII码并存放到首址为D的寄存器中。
结合上篇文章,特殊继电器M8161的状态可以将ASCI指令分为16位数据处理模式和8位数据处理模式。
(1)16位数据处理模式
特殊继电器M8161=OFF,ASCI指令为16位数据处理模式。当驱动条件成立,将以S为首址的寄存器的n个十六进制字符转换为ASCII码,并分别存放到以D为首址的寄存器的高8位和低8位。
1个16位(二进制位)的寄存器含有4个十六进制字符,如下图15-3所示,每1个十六进制字符转为ASCII码后需占有2个十六进制位(8个二进制位),如D0中低4位组成一个十六进制位H1,将字符“1”转换为ASCII后变成H31,即1→31。
也就是说,执行指令ASCI D0 D100 K1,已知(D0)=H4321,指令执行完后(D100)=H0031,如下图15-4所示。
在16位数据处理模式下,终址D对应的寄存器,其高8位也被利用,换句话说,一个D可以存放2个ASCII码。由每个S有4位HEX数据,全部转换为ASCII码就需要2个D。 如下图15-5所示,执行指令ASCI D0 D100 K4,已知(D0)=H4321,指令执行完后(D101)=H3132,(D100)=H3334,其中D100中的“34”为D0中“4”的ASCII码,依次类推。
这里要注意的是,HEX数据在转换的过程中,最后被转换的会存放在终址D的最低位,例如上例中的十六进制字符“4”对应的ASCII码存放到D100的低8位,这如同一个压栈的过程。而在实际应用中,常采用的是8位数据处理模式。
(2)8位数据处理模式
特殊继电器M8161=ON,ASCI指令为8位数据处理模式。当驱动条件成立,将以S为首址的寄存器的n个十六进制字符转换为ASCII码,并分别存放到以D为首址的寄存器的低8位,高8位忽略不用。
此时一个S的4位HEX数据,全部转换为ASCII码就需要4个D寄存器,如下图15-6所示。执行指令ASCI D0 D100 K4,M8161=ON,已知(D0)=H4321,指令执行完后(D100)=H0034,其中D100中的“34”为D0中“4”的ASCII码,高8位作置零处理,依次类推。
在低8位数据处理模式下,因为1位HEX数据转换为ASCII码就要占用1个寄存器,所以要转换n个字符,就要用到n个占D寄存器,其最高地址为D+n-1。如下图15-7所示,执行指令ASCI D0 D100 K10,n=10,终址D的最高地址为D109(100+10-1),且存放的是最先转换的字符“A”,其ASCII码为H41。
十六进制字符0~9,A~F对应的ASCII码分别为H30~H39,H41~H46,这个是可以通过查表得知,不过也比较好记。知道了ASCI指令是怎么回事后,再来看HEX指令就显得很简单。
▎02 ASCII→HEX转换指令HEX
HEX指令的作用是将外围设备向PLC回传的ASCII码转换为HEX数据。其编程手册截图和梯形图形式如下图15-8所示。和ASCI指令一样,HEX指令也有3个操作数,源址S为ASCII码存储字元件首址;终址D为HEX数据存储字元件首地址;n依然是需转换的HEX字符的个数,取值范围为1~256。
当驱动条件成立时,将源址S的ASCII码转换为n个十六进制字符并存放到首址为D的寄存器中,分为16位和8位数据处理模式。其对数据的处理过程恰好为ASCI指令的逆过程,如下图15-9所示,执行指令HEX D0 D100 K1,(D0)=H0041,ASCII码“H41”对应字符“A”,所以指令执行完毕后,(D100)=H000A。
可以发现,1个S最多能存2个ASCII码,全部转换为HEX数据只占用D的低8位。换句话说,也就是1个D可以存放2个S的共4个ASCII码。基于ASCI指令讲解的比较详细,HEX指令的16位数据处理模式就不再展开讲解,它是将S的高8位和低8位均作为ASCII码进行转换。
HEX指令的8位数据处理模式,是指把S为首址的寄存器的低8位数据对于的ASCII码转换为HEX数据并存放到D位首址的寄存器中,此时每转换4个S占用1个D。如下图15-10所示,执行指令HEX D0 D10 K8,M8161=ON,8位数据处理模式,D0~D7的高8位数据均忽略不作处理,仅对其低8位数据进行转换。如D0的低8位为H38,该ASCII码对应的字符为“8”,所以终址D11的高4位就为H8,最先转换的存放在最高位。
这里要注意的是,S中的数据一定要符合ASCII码的标准才能被转换,如果不是ASCII码,则运算错误。
ASCI指令和HEX指令还是比较常用的,大家很有必要去理解它们,这次的学习分享虽然没有结合实际的梯形图案例,但还算详细,希望大家在阅读后能有所收获哟。那么,这次的学习分享就到这里。
标签:字符,转换,三菱,HEX,指令,FXPLC,ASCI,Mitsubishi,ASCII From: https://www.cnblogs.com/ybqjymy/p/17606123.html