分享

记kepServer读写西门子PLC

 抽空学 2021-03-02

在程序开发过程中为了测试方法或者验证某个属性的值是否正确 经常通过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

可能写的比较粗糙,望各位看官批评指正!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多