记kepServer读写西门子PLC
在程序开发过程中为了测试方法或者验证某个属性的值是否正确 经常通过Kepserver 的 OPC Quick Client来手动置点或者读取点位
例如
这里显示的值都是经过转化后得到的十进制值,那我们如果要针对该word中的某bit 该如何读取,?
首先理解一下最基本的概念
位:bit 最小的存储单位,bool量, 非0则1,表达两个状态
字节:byte 8位组成一个字节 1byte=8bit
字:word 相邻两个字节组成一个字 即16位 1word=2byte=16bit
双字:double word ,两个字组成一个双字 即32位
注意:西门子的字是双数开头,不能是单数,所以在kepServer编写tag时需要注意
例如:
西门子表达比较特殊,就是低字节高位。高字节低位
我们要想给置点或者读点,我们首先要理解西门子PLC的低位高字节是什么意思,这里我借助百度知道的答案
这个图其实已经很明白了,我们借助下图来简单说明一下
这是DB83这个数据块中的一个字的数据 一共16位 这个字的地址就是DB83.DBW10
我们在Kepserver中的tag中是这样写的,也就是
对比上面的高字节低位示意图我们把DB83.DBW10这个字展开
DBW10
dbx10.7 dbx10.6 dbx10.5 dbx10.4 dbx10.3 dbx10.2 dbx10.1 dbx10.0 | dbx11.7 dbx11.6 dbx11.5 dbx11.4 dbx11.3 dbx11.2 dbx11.1 dbx11.0
这样的话假设DBW10的值为0,我们如果想要将dbx10.4置为1
需要给dbw10赋值 0001 0000 0000 0000
在KepServer中赋值需要将对应二进制转化为10进制 在赋值
借助计算器 我们需要将4096赋值给DBW10
打开OPC Quick Client ,给对应tag写值
这样就给dbx10.4置为1了
这样就满足我们如何在某一个'字'中的某一'位'置点;
在某一字中读取某一位的值,反过来就可以,
例如 我们读取到该字的值为34257
我们想要知道dbx10.2的值是0还是1 ?
我们先把十进制34257转化为二进制
1000 0101 1101 0001
对比上面DBW10展开的示意图,dbx10.2的值为1
可能写的比较粗糙,望各位看官批评指正!