ascii码为0的字符_西门子PLC如何读取字符里数

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

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

1.简单粗暴!

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

522d64c086e9d30a0fae2cde3532d7a4.png

简单粗暴的转换方式:

01b1ded8c7caeb087ca3543794f47cb9.png

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

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

63d2a2fdd6cd41f291436ed488cf119f.png

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

a7318b0a2425007698ca164544645738.png

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

2.使 BCD码转换整数

672b2824ce3b7bdff26b40e180b49658.png

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

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

1d8562124f0c3447502a55d60580e3d5.png

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

2.精简功能块.

使用西门子标准块:

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

2461dc700488d5c15f5352534152c796.png

FC94

278c3641abfea4bdfef18e3fae3be993.png

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字符的等价十六进制值,请参考下表。)

a26ee8031e57e52af99e6da6d1ec071e.png

给入的字符

087f0b46e5cd558b3d95f002f967a2ee.png

输出的16进制数

90a93f43e3c60d67f4f43fedf7c39f53.png

例子:

de7a5a0e2d690d41726449df10028e20.png

DB1里的字符数

ba9d4906f0a85745c49c5e80a9062c60.png

DB2里的给定值

134b4286d7b2f005dfdbf4e24b9b7153.png

----------------------END----------------------

每天进步一点点

Make small but daily progress

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值