python 通过 Snap7 与 PLC 实现数据通信

PLC配置

此文章以西门子PLC S7-1200为例。

IP地址设置

在这里插入图片描述

关闭PLC数据保护

需要关闭数据块的优化访问选项。所有需要访问的数据块都得开启,否则程序会报错。
在这里插入图片描述

开启访问权限

需要开启访问所有权限,否则程序连接会报错。
在这里插入图片描述

电脑配置

配置本机IP地址

由于PLC的通讯地址是192.168.0.1,需要将本机的IP地址与PLC设置在同一网段,博主设置为192.168.0.123。
可以通过命令行窗口输入ping 192.168.0.1来确认是否寻找到PLC。

安装python-snap7

需要安装支持库snap7,在命令行窗口输入 pip install python-snap7

snap7.dll库移植

如果只是安装python-snap7库还是无法正常运行,需要将dll文件放置到相应的目录下。步骤如下:
1.下载dll连接:snap7-SDK这里的压缩包内有32位和64的dll,还有一个简单的demo程序
2.如果使用的python是32位(64位)的编译环境就将压缩包内win32(win64)文件里面的snap7.dll文件拷贝至==C:\Windows\System32(C:\Windows\SysWOW64)==目录下。
3.利用网线将电脑与PLC连接,然后运行demo程序即可读取到PLC相应里相应数据。

PLC数据块区域定义

Value Mean
S7 Area PE 0x81 Process Inputs
S7 Area PA 0x82 Process Outputs
S7 Area MK 0x83 Merkers
S7 Area DB 0x84 DB
S7 Area CT 0x1C Counters
S7 Area TM 0x1D Timers

PLC数据格式

在这里插入图片描述

程序注解

def readDI(self):
        area = S7AreaPE
        db = 0
        start = 0
        amount = 2
        ba = self.client.read_area(area, db, start, amount)
        d = ba[0]
        d <<= 8
        d |= ba[1]
        return d
def writeDQ(self, data):
        area = S7AreaPA
        db = 0
        start = 0
        amount = 2
        ba = bytearray(amount)
        ba[1] = data & 0xff
        ba[0] = data >> 8
        self.client.write_area(area, db, start, ba)

由于是以西门子PLC为演示,所以此处的数据读取到的是小端字节的格式(即按内存增大的方向存储,低位在前高位在后)。如果是三菱的PLC则是大端字节的格式。

备注

1.如果需要读取相应的PLC数据,需要与PLC开发者协商,让其提供所需数据所在的数据区域以及数据类型。
2.请确保安全下调试PLC,否则可能输入错误数据导致PLC所控制的系统崩溃或者出现严重事故。
3.西门子S200由于过时,存在V区,而当前接口没有V区地址,需要PLC开发者将相应V区数据挪移到M区即可。

猜你喜欢

转载自blog.csdn.net/youngdianfeng/article/details/112069807
今日推荐