西门子PLC中如何读取字符里数?

描述

在进行PLC与PC进行TCP通讯时如何运用CP传过来的数值呢?

下面我做两种方式的解析: 1.简单粗暴!2.精简功能块.

1.简单粗暴!

ASCII字符和等价的十六进制值

plc

简单粗暴的转换方式:

有时我们会用PC给西门子PLC发送几个字符,我们如何读取字符呢?

我们先要进行一个BCD转2进制的转换,然后再运用减法取出我们需要的数

plc

1.将字符存储的字节转存到字里

plc

MOVE (分配值)通过启用EN输入来激活。在IN输入端指定的值将复制到在OUT输出端指定的地址。ENO与EN的逻辑状态相同。MOVE只能复制BYTE、WORD或DWORD数据对象。

2.使 BCD码转换整数

plc

BCD_I (BCD码转换为整型)将参数IN的内容以三位BCD码数字(+/- 999)读取,并将其转换为整型值(16位)。整型值的结果通过参数OUT输出。

3. 三进行减数运算将字符格式的标示30减去,剩下的就是字符的数转化成了整数

plc

SUB_I  减去整数:在启用(EN)输入端通过逻辑"1"激活SUB_I (减去整数)。从IN1中减去IN2,并通过OUT查看结果。如果该结果超出了整数(16位)允许的范围,OV位和OS位将为"1"并且ENO为逻辑"0",这样便不执行此数学框后由ENO连接的其它函数(层叠排列)。

2.精简功能块.

使用西门子标准块:

专门转换字符为16进制的FC97

plc

FC94

plc

ATH功能将IN指向的ASCII字符串转换为压缩十六进制数字,然后将其存储在OUT指向的目标表格中。由于ASCII字符需要8位,而十六进制数字只需要4位,输出字长度仅是字长度的一半。按其读入顺序转换ASCII字符并将结果置于十六进制输出中。如果ASCII字符数为奇数,则最后转换的十六进制数字的最右侧半个字节以零填充。

IN       :*Pointer       指向ASCII字符串的起始位置。

N       :INT       要转换的ASCII输入字符数

OUT       :*Pointer  指向表格的起始位置。      

如果输入I0.0的信号状态为1 (激活),则执行ATH指令。在本例中,输入参数N为5表示要转换五个ASCII字符。ASCII字符以IN指针位置DB1.DBX10.0为起点,存储在数据块1中。输出字符串将以OUT指针位置DB2.DBX0.0 (数据块2)为起点存储。由于ASCII输入字符数为奇数,最后一个十六进制位最右边的半个字节中的值全部为零,从而生成十六进制值0xC0。(有关每个ASCII字符的等价十六进制值,请参考下表。)

plc

给入的字符

plc

输出的16进制数

plc

例子:

plc

DB1里的字符数

plc

DB2里的给定值

plc

 

原文标题:西门子PLC-如何读取字符里数

文章出处:【微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分