gan通过python实现_python在工业控制中的案例:通过python-snap7实现对PLC的读写

1、背景

最近一位朋友开发了一个PC和PLC之间通信的接口。现场的情况是这样的:一台Linux服务器通过以太网和S7-1200 PLC连接,用户希望从客户端实现对PLC的读写。(私信我python,获得万元python大礼包!)

说到PLC通信,一开始我想到的是用OPC Server来实现,因为之前有做过OPC Server的相关开发。但是OPC Server是基于DCOM的方式来通信的,Linux环境下是不支持的。朋友希望最后开发出来的接口是可以实现跨平台的,于是我决定用Python来开发,而且python有很多开源的第三方库可以用。后来在stackoverflow看到有人使用Snap7实现过与S7-200的通信,使用的正是python-snap7。

2、Snap7

Snap7是一款开源的32/64位多平台以太网通信套件,用于与西门子S7 PLC进行本地连接。 新款CPU 1200/1500,旧款S7200,小型LOGO 0BA7 / 0BA8和SINAMICS Drives也得到部分支持。官网地址:http://snap7.sourceforge.net/,有python、c#和Java使用的库。

3、snap7安装

使用python的pip命令安装即可:pip install python-snap7

或者通过离线安装,先下载python-snap7,在https://pypi.org/project/python-snap7/#files下载python-snap7-0.9.tar.gz,解压后使用python path/setup.py install命令进行安装即可。(path为解压后setup.py文件的路径)。

fe7f33266c32f90bde4a3b5e36c96bfc.png

4、在windows中简单测试

966986d6be2839d62c97b8fbefc4821c.png
813075d3b89e86fc34e599d86be58378.png

5、用很少的代码就可以实现PLC的读写。

测试程序源码https://gitee.com/xiuping_z/Python-Snap7-for-PLC-S71200/attach_files

#数据查询,查出结果为Bytestring def queryData(self): plc = snap7.client.Client() try: plc.connect(self.IP.get(), self.rack.get(),self.slot.get()) data= plc.db_read(self.DBNo.get(),self.dataAd,self.dataSz) self.txtMsg.insert(END, data) except Exception as e: self.txtMsg.insert(END, (e, 'IP:', self.IP.get())) finally: if plc.get_connected(): plc.disconnect() #发送数据 def sendData(self): plc = snap7.client.Client() """ Here we replace a piece of data in a db block with new data Args: db (int): The db to use start(int): The start within the db size(int): The size of the data in bytes _butearray (enumerable): The data to put in the db """ try: data = self.StrtoByesarray(self.data.get()) if not data.strip(): self.txtMsg.insert(END,'发送数据不能为空') return plc.connect(self.IP.get(), self.rack.get(), self.slot.get()) plc.db_write(self.DBNo, self.dataAd, data) except Exception as e: self.txtMsg.insert(END , (e,'IP:',self.IP.get(), 'Port:')) finally: if plc.get_connected(): plc.disconnect() #将bytes字符串转化为bytes def StrtoByesarray(self,strdata): strarry = strdata.split() list = [] for itm in strarry: list.append(itm) return bytearray(list)

(私信我python,获得万元python大礼包!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值