打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python

说明

在一次数采项目中,对现场PLC300进行取数。本人小白,在网上搜罗了大量信息,终于找到解决方法。

准备事项

1. 操作系统

2.Python环境(本次使用Python3.6.6)

3.Snap7

connect

connect('192.168.0.1', rack=0,slot=1)

三个参数分别为:IP 地址,机架,插槽

read_area及write_area

函数

read_area(self,area,dbnumber,start,size)#读取数值write_area(self,area,dbnumber,start,data) #写入数值(未测试)

参数area:

两个函数的核心都是对area进行读写操作,area用于区分I、Q、M、DB区域(西门子PLC中存储区有I、Q、M、DB、V区等等,本人为小白,此处不做具体了解),针对各个分区都有指定的值。具体如下:

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

参数dbnumber:

dbnumber只有在对DB块使用时才有用,默认设置为0。

备注:

此次项目以取DB区域数值为主,未做其它区域测试,在PLC中,有很多的DB块,每个块中,分别存储不同的信息,个人理解此处更类似于电脑中的硬盘分区,每个DB块是一个分区,PLC将指定的数值存储在指定硬盘分区中。

参数start:

例如取DB7.10地址上的值

start起始地址为10,即PLC中的偏移地址。

参数size:

size是选择读取的数据类型占用地址位的尺寸,即占几个地址,如下:

示例

获取DB7.46的REAL值:

import snap7from snap7.util import *from snap7.snap7types import *PLC_obj=snap7.client.Client()PLC_obj.connect('192.168.0.1',rack=0,slot=2)Real_Value=PLC_obj.read_area(0x84,7,46,4)get_real(Real_Value,0)

断开连接:

PLC_obj.disconnect()

备注

在获取S7WLByte数值时,需要使用get_int来获取数值,但是在获取数值时,会提示以下错误:

>>> Real_Value=PLC_obj.read_area(0x84,7,0,1)>>> get_int(Real_Value,0)Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "/usr/local/software/Python3.6.6/lib/python3.6/site-packages/snap7/util.py", line 149, in get_int    data[1] = data[1] & 0xffIndexError: bytearray index out of range

解决方法:

提高get_area的尺寸长度,但是获取到的数值和实际数值不符,需要在获取到的数值的基础上除以256,才是实际的数值。

>>> Real_Value=PLC_obj.read_area(0x84,7,0,25)>>> get_int(Real_Value,0)3859

参考资料

python snap7读写西门子s7-1200PLC的数据(PLC的I、Q、M、DB、V区)

采用snap7实现对PLC1200的I、Q、M、DB区域进行读写

二〇二〇年四月十四日 10:27:09

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
小说python操作PLC
Python-snap7与S7-1500的通讯
【学习经验分享】Siemens SCL 学习心得
西门子SCL编程入门教程连载(10)-PEEK指令
Python学习笔记《Python核心编程》第5章 数字
西门子828D用户PLC报警总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服