zoukankan      html  css  js  c++  java
  • 记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

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

  • 相关阅读:
    Gitlab 自动化部署 + 局域网访问 gitlab pages
    Gitlab 跨版本升级
    Gitlab 私有化管理 npm 包
    Postman-请求加密和设置 Cookie
    menuStrip鼠标滑过自动弹出
    JAVA实用案例之文件导入导出(POI方式)
    springboot npoi 合并单元格 之后设置单元格居中
    postman测试导出Excel接口
    Application.DoEvents()的作用
    设置WINFORM窗体及程序图标
  • 原文地址:https://www.cnblogs.com/pandefu/p/11283372.html
Copyright © 2011-2022 走看看