S7-300通过RS232通信模块采集到的信息,如何转换成一个实数类型的,比如S7-300通过RS232通信模块采集到一个仪器的ASCII码的压力值,但是这个压力值的每个数字是分别存储在单个连续字节里面的,我如何把它转换成一个实数类型的数据啊?万分感谢
最佳答案
1、可以使用 IEC 的标准功能,这些功能块可以实现字符串与其它数据类型(例如双整数)之间的相互的转换。
FC39 STRNG_R: 将字符串转换为实数。
功能FC39将字符串转换为REAL数据类型格式变量。字符串必须为以下格式:
±v.nnnnnnnE±xx ± 符号
v 小数点前1位
n 小数点后7位
x 2位指数
2、上述功能要求被转换的数据格式较为严格。建议:
、可应用FC37( STRNG_DI: )将字符串转换为双整数先将缓冲区中的字符串转换为双整数:
功能FC37将字符串转换为DINT数据类型格式变量。字符串中的第一个字符可以是符
号或数字,随后的字符必须是数字。如果字符串的长度等于零或大于11,或者字符
串中有无效字符,则不进行转换。
、转换为双整数后应用STEP7的STL指令:
DTR: 双整数(32 位)转成浮点数(32 位,IEEE-FP)。
3、有关 IEC 的标准功能,详见:
<S7-300400的系统软件和标准功能>下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=1023
4、有关STEP7的STL指令DTR:
《用于S7-300 和S7-400 的语句表(STL)编程手册》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText= 1008
5、上述有关 IEC 的标准功能均对被转换的数据格式要求较为严格,如果你的数据不适合上述
IEC 的标准功能,可以自己编写,程序十分简单:
、先将ASCII码转换为整数,例如:ASCII码的30(十六进制),31,32.......,对应数值0,1,2,......。两者相差30(十六进制),即将各ASCII码减去30(十六进制),其查值就是对应的数值。
、将转换的数值按万、千、百、十、个位分别乘以10000、1000、100、10、1后相加。结果为双整数。
、将相加的双整数应用STEP7的STL指令DTR( 双整数(32 位))转成浮点数(32 位,IEEE-FP)。
、编程时要注意万、千、百、十、个位的位置。
提问者对于答案的评价:
现场是一台电子秤和226CPU,PLC和电子秤进行自由口通讯的时候,我能在通信线上接两根线用来连接电脑,用串口通讯软件检测他们收发的数据吗?
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc232427.html