上位机与西门子通讯

  • Post author:
  • Post category:其他


最近做的两个全自动项目,均是上位机与西门子PLC的通讯,进行数据的读取以及 写入。



工具



(1)PLC型号

1214 DC/DC/DC。其实,后面用到的通信库,支持西门子很多型号的PLC,由于没有亲测过,因此不作说明。



(2)上位机语言

VB,由于是在原来软件基础上增加全自动流程,因此采用VB语言。C#其实很香。



(3)PLC通信库:

我采用的是Sanp7.dll的通信库。这个在网上可以下载到。还有很多其他的通信库,可在网上自行下载。
该通讯库是通过绝对地址进行数据访问的,即采用**地址偏移量**,**数据长度**来进行访问。



通讯实操

该通信库可以进行M区的数据读写以及DB数据的读写。这里介绍的是DB全局变量的读写。

具体的PLC创建DB区数据的过程就不进行叙述。但是下面一点需要特别注意:

(1)在CPU属性>防护与安全>连接机制中勾选允许PUT/GET访问。

(2)默认创建的DB块的属性中,

优化的块访问

是默认勾选的。这会导致第三方无法访问该数据块,因此需要取消勾选。取消勾选后会导致该数据块的变量无法单独保持,只能是全部保持或者是全部不保持。典型的鱼与熊掌,不可兼得!

**注:**变量不保持的话,PLC断电重启的话,其变量的数据会初始化成起始之,运行工程中设定的值不会被保存。

在这里插入图片描述

在这里插入图片描述



关于Bool量的读写

一般的,Bool量作为状态量,可以监控或者是改变PLC中IO状态。在DB块中创建Bool量,其大小为1位,因此8个Bool量占据一个字节,每一位上的状态是0或者1。在读取数的函数中,字节数最小为1个,因此,会将连续的8位状态全部读上来。那么,如何获得每一位上的状态呢?注意:操作某一位或者同时多位时,不能改变其他位的状态。

对于Snap7通信库我的操作方法如下:


将读取上来的数据转换成二进制,这样能获得每一位上的状态,然后根据需要,改变其中一位或者是多位上的状态值,然后转换成十进制数,然后写进PLC。



多字节变量的读写。

关于多变量的读写,这里就不具体的说了,根据偏移量以及字节大小即可进行读写。



版权声明:本文为luguojiu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。