工业采集S7协议 python通过S7协议通信

Python使用snap7库进行采集S7协议通信

S7协议介绍

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

环境准备

1. 安装开源库python-snap;

pip install python-snap7

2. Python版本python3.6;

代码实现

1. snap7库简单介绍

snap7库主要通过read_area和write_area两个函数实现对PLC数据的读写;
snap7中有专门的方法读取数据。

读取M位存储区数据:

读取存储区数据的编号:
areas = ADict({
    'PE': 0x81,
    'PA': 0x82,
    'MK': 0x83,
    'DB': 0x84,
    'CT': 0x1C,
    'TM': 0x1D,
})
读数据;
read_area(area,dbnumber,start,size)
area:area参数用于区分I、Q、M、DB存储区:
dnumber:0
start:起始地址
size:读取长度

在snap7中加入PLC使用的是PE那就在代码中使用的是‘0x81’的编码

例:read_area(0x84, 100, 0, 0)

通过S7采集的数据返回的数据是 byteorder类型,所以如果需要变成自己能用的数据还需要转下格式。

2. 完整的代码

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

client = snap7.client.Client()
# IP地址,机架,槽位
client.connect('10.0.11.241', 0, 1)
# 测试是否通讯成功
if client.get_connected():
    print('连接成功')
else:
    print('连接失败')

def cj_s7():
    while True:
        cj0 = client.read_area(0x84, 100, 0, 2)
        cj1 = client.read_area(0x84, 100, 1, 2)
        cj_time = time.time()
        log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print("数据解析结果点位1:"+cj0)
        print("数据解析结果点位2:"+cj1)
        time.sleep(1)#等待一秒,一秒一个的获取数据

#有必要的情况下可以创建个多线程
def xc():
    # 创建线程
    thread_hi = cj_s7()
    # 启动线程
    thread_hi.start()
    print('Main thread has ended!')

if __name__ == '__main__':
    xc()

总结

s7协议我也是刚开始接触,所以很多地方也有需要完善学习的地方,希望有个老师能来指导指导下。
谢谢,可以留下或私聊下联系方式:qq:3025905045

你可能感兴趣的:(工业互联网,python,开发语言,后端)