Python通过S7协议与S7-1200通信实现

Snap7是一个用于处理S7以太网协议,与西门子S7系列PLC通讯的开源通讯组件。支持与S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太网通信。

 

网络上有一个基于Snap7开发的Python开源库python-snap7,下面就具体介绍利用Python实现与S7-1200的通信。

 

1.安装开源库 python-snap

 

 

2. PLC端准备

IP地址设置,与PC同一网段;

注:本例使用TIA V13

 

3. Python程序开发

 

主要通过read_area和write_area两个函数实现对PLC数据的读写

 

读取M位存储区数据:

read_area(area,dbnumber,start,size)

area:

area参数用于区分I、Q、M、DB存储区:

areas = ADict({
  'PE': 0x81,  #input 输入区
  'PA': 0x82,  #output 输出区
  'MK': 0x83,  #bit memory 中间存储区(M区)
  'DB': 0x84,  #DB区
  'CT': 0x1C,  #counters
  'TM': 0x1D,  #Timers
})

dnumber:0

start:起始地址

size:读取长度

下图举例读取S7-1200 %MW2的数据;

 

写M位存储区数据:

write_area(self, area, dbnumber, start, data)

area:0x83;

dnumber:0

start:起始地址

data:数据

 

import snap7
from snap7.util import *  #对位操作的函数要导入该库
import time

client = snap7.client.Client()
# IP地址,机架,槽位
client.connect('192.168.0.1',0,1)

#测试是否通讯成功
if client.get_connected():
    print('连接成功')
else:
    print('连接失败')


a = bytearray(2)  # 定义一个包含两个字节类型的数组
a[0]=0x08

a[1]=0x02

#往M区起始为2的地址写入数据a

client.write_area(0x83,0,2,a)

 

 

还有一种方法,先读取需要修改的数据,然后通过set方法修改其值,最后通过write_area写入,这样就不必按字节写入了。

 

res = client.read_area(0x83,0,0,2)
set_int(res,0,128)    # 128是写入的值
client.write_area(0x83,0,0,res)

 

最后分享一个跑马灯视频:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章