电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

西门子PLC中的ASCⅡ码与数值转换指令

2016-08-25 15:26分类:PLC编程入门 阅读:

 

 
    ASCII码与数值转换指令是将由ASCII码表示的0-9、A~F的字符串,与十六进制数、整数、双整数及实数之间进行转换。
    (1) ASCII码与十六进制数转换指令
    LAD及STL指令格式如图6-44所示,
 LAD及STL指令格式
    1) ASCII码转十六进制数(ATH)指令:将从IN指定的地址开始、长度为LEN的ASCII码字符串转换为十六进制数,并将结果送到OUT指定的地址开始的字节进行输出。每一个ASCII码对应4位十六进制数,ASCII码字符串的最大长度为255个字符。
    2)十六进制数转ASCII码(HTA)指令:将从IN指定的地址开始、长度为LEN的十六进制数转换为ASCII码字符串,并将结果送到OUT指定的地址开始的字节进行输出。可转换的十六进制数的最大个数为255。
    在这两个指令中,有效的ASCII码字符为十六进制数30~ 39和41—46。指令影响的特殊存储器标志位是:SMl.7(非法的ASCII码)。
    假设VB30。VB32中存放了3个ASCII码33(“3”)、45(“E”)和41(“A”),指令“ATH VB30,VB40,3”将它们转换为16#3E和16#Ax,分别存放在字节VB40和VB41中,“x”表示VB41低4位(半个字节)的数未发生变化。
    (2)数值转为ASCII码的指令
    LAD及STL指令格式如图6-45所示。
  LAD及STL指令格式
    1)整数转为ASCII码(ITA)指令:将整数输入数据IN转换成ASCII码字符串,转换结果存人OUT指定的地址开始的连续8个字节存储器单元中。ASCII码字符串始终是8个字节。格式参数( FMT)指明转换后的摆放格式,FMT的说明如图646所示。
FMT的说明如图
    图中nnn用于指定输出缓冲区中小数点右侧的位数,nnn的有效范围为0—5。如果n=0,则显示整数。nnn >5时,输出缓冲区会被空格键的ASCII码填充。位c指定用逗号(c=1)或小数点号(c=0)作为整数和小数部分的分隔符。FMT的高4位必须为0。图6-46中的FMT =3(即nnn= 011),小数部分有3位,使用小数点号(c=0)。
    输出缓冲区按下面的规则进行格式化:
    ·正数值写入缓冲区时没有符号位,负数值写入缓冲区时以负号(一)开头。
    .小数点左侧的开头的0(除去靠近小数点的之外)被隐藏。
    .数值在输出缓冲区中是右对齐的。
    2)双整数转为ASCII码(DTA)指令:将双字整数输入数据IN转换成ASCII码字符串,转换结果存入OUT指定的地址开始的连续12个字节存储器单元中。输出缓冲区的大小始终为12个字节(B),FMT各位的意义和输出缓冲区格式化的规则同ITA指令。
格式操作数FMT的定义如图
   3)实数转为ASCII码(RTA)指令:将实数输入数据IN转换成ASCII码字符串,转换结果存人OUT开始的输出缓冲区中,输出ASCII码字符串的位数(长度)就是输出缓冲区的大小,它的值为3 -15个字节或字符。格式操作数FMT的定义如图6-47所示,输出缓冲区的大小由ssss区的值指定,ssss =3—15。输出缓冲区中小数部分的位数由nnn指定,nnn =0—5。如果n=0,则显示整数。nnn >5或输出缓冲区太小以致于无法存储转换值时,输出缓冲区会被空格键的ASCII码填充。位c指定用逗号(c=1)或小数点号(c=0)作为整数和小数部分的分隔符。FMT和OUT均为字节变量。
  S7-200 PLC的实数格式支持最多7位小数,若显示7位以上的小数会产生一个四舍五入的错误。
    除了ITA指令输出缓冲区格式化的三条规则外,还有以下规则:
    .小数部分的位数如果大于nnn指定的位数,用四舍五入的方法去掉多余的位。
    .输出缓冲区不应小于3个字节,还应大于小数部分的位数。
    (3)字符串转换指令
1)数值转为字符串的指令:LAD及STL指令格式如图6-49所示。ITS、DTS和RTS指令分别将整数、双整数和实数值(IN)转换为ASCII码字符串,存放到OUT指定的变量中。
LAD及STL指令格式
    这三条指令的操作和FMT的定义与ASCII码转换指令的定义基本相同,两者的区别在于,字符串转换指令转换后得到的字符串的起始字节(即地址OUT所指定的字节)中是字符串的长度。对于整数和双整数的转换,起始字节中分别为转换后字符的个数8和12,实数转换后字符串的长度由FMT的高4位中的数来决定。
2)子字符串转为数值的指令:LAD及STL指令格式如图6-50所示。
LAD及STL指令格式如图
  S1rI、STD和STR指令分别将从偏移量INDX开始的字符串(IN)转换为整数、双整数和实数值,存放到OUT指定的变量中。STI、STD指令将字符串转换为以下格式的整数:
    [空格][+或一][数字0-9]
    STR指令将字符串转换为以下格式的实数:
    [空格][+或一][数字0—9][.或,][数字0-9]
    INDX通常设置为1,即从字符串的第一个字符开始转换。如果只需要转换字符串中后面的数字,可以将INDX设为大于1的数。这可以被用于字符串中包含非数值字符的情况。
例如只转换字符串“Temperature:77.8”中的数字时,可以设置INDX为13。
    子字符串转为实数( STR)指令不能用于转换以科学计数法和指数形式表示实数的字符串,例如会将“1. 345E8”转换为实数值1.345,而且没有错误显示。
    转换到字符串的结尾或遇到第一个非法的字符(不是数字0~9)时,转换指令结束,停止转换。转换产生的整数值超过有符号字的范围时,溢出标志位SMl.1将被置位。例如,当输入字符串产生的数值大于32767或小于- 32768时,字符串转为整数指令会置位溢出标志。
    当输入字符串中不包含可以转换的合法数值时,溢出标志位SMl.1也会置位。例如,如果输入字符串为“A123”,转换指令会置位SMl.1而且输出值保持不变。
    图6-51给出了子字符串转为数值指令的应用示例。
子字符串转为数值指令

上一篇:什么是字节交换指令以及应用例子

下一篇:请问如何使用填表指令

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部