在进行PLC与PC进行TCP通讯时如何运用CP传过来的数值呢?
下面我做两种方式的解析: 1.简单粗暴!2.精简功能块.
1.简单粗暴!
ASCII字符和等价的十六进制值
简单粗暴的转换方式:
有时我们会用PC给西门子PLC发送几个字符,我们如何读取字符呢?
我们先要进行一个BCD转2进制的转换,然后再运用减法取出我们需要的数
1.将字符存储的字节转存到字里
MOVE (分配值)通过启用EN输入来激活。在IN输入端指定的值将复制到在OUT输出端指定的地址。ENO与EN的逻辑状态相同。MOVE只能复制BYTE、WORD或DWORD数据对象。
2.使 BCD码转换整数
BCD_I (BCD码转换为整型)将参数IN的内容以三位BCD码数字(+/- 999)读取,并将其转换为整型值(16位)。整型值的结果通过参数OUT输出。
3. 三进行减数运算将字符格式的标示30减去,剩下的就是字符的数转化成了整数
SUB_I 减去整数:在启用(EN)输入端通过逻辑"1"激活SUB_I (减去整数)。从IN1中减去IN2,并通过OUT查看结果。如果该结果超出了整数(16位)允许的范围,OV位和OS位将为"1"并且ENO为逻辑"0",这样便不执行此数学框后由ENO连接的其它函数(层叠排列)。
2.精简功能块.
使用西门子标准块:
专门转换字符为16进制的FC97
FC94
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字符的等价十六进制值,请参考下表。)
给入的字符
输出的16进制数
例子:
DB1里的字符数
DB2里的给定值
原文标题:西门子PLC-如何读取字符里数
文章出处:【微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !