首页 > 编程语言 >用 python 的snap7库 连接西门子 200 smart

用 python 的snap7库 连接西门子 200 smart

时间:2022-12-14 08:55:44浏览次数:125  
标签:__ 200 字节 snap7 python 读出 read plc

先推荐一篇知乎上的文章,讲的非常详细.  使用Snap7读写西门子S7系列PLC

但,可能存在版本不同的问题,很多地方不能正常运行.下面贴出的是测试代码:

环境 python 3.8.4 (snap7 目前需要工作在 python3.6+,我经常用的是python3.4.4,这是支持XP的最后一个版本,已确定这个版本连import snap7 都报错)

snap7  python-snap7 1.2

>>> from snap7 import client
>>> from snap7.types import areas
>>> type(areas)
<class 'snap7.common.ADict'>
>>> areas['MK']
131

# 按推荐文档连接PLC 成功
>>> plc = client.Client()
>>> plc.set_connection_type(2)
>>> plc.connect('192.168.2.1',0,1)
>>> plc.get_connected()
True
# 但读数据时报错
>>> 读出的字节组 = plc.read_area(areas['MK'],0,1,1)
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    读出的字节组 = plc.read_area(areas['MK'],0,1,1)
  File "C:\Python38\lib\site-packages\snap7\client.py", line 390, in read_area
    if area not in Areas:
  File "C:\Python38\lib\enum.py", line 315, in __contains__
    raise TypeError(
TypeError: unsupported operand type(s) for 'in': 'int' and 'EnumMeta'
# 打算读的是 200smart 的VB10,尝试用GitHub下载的源码中的例子尝试
# 但不清楚plc.db_read(0,10,1)的第一个参数应该怎么填,最后试出,对于200smart,应该填1
>>> 读出的字节组 = plc.db_read(0,10,1)
b'CLI : function refused by CPU (Unknown error)'
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    读出的字节组 = plc.db_read(0,10,1)
  File "C:\Python38\lib\site-packages\snap7\client.py", line 226, in db_read
    check_error(result, context="client")
  File "C:\Python38\lib\site-packages\snap7\common.py", line 89, in check_error
    raise RuntimeError(error)
RuntimeError: b'CLI : function refused by CPU (Unknown error)'
>>> 读出的字节组 = plc.db_read(1,10,1)
>>> 读出的字节组
bytearray(b'\x0f')

# 通过查看源码,找到了正确的 read_area()的使用办法
>>> from snap7.types import Areas
# Area.DB 指300,400,1200,1500中的DB块,也指200smart中的V区(相当于DB1)
# DB号填错,被PLC拒绝
>>> 读出的字节组 = plc.read_area(Areas.DB,0,10,1)
b'CLI : function refused by CPU (Unknown error)'
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    读出的字节组 = plc.read_area(Areas.DB,0,10,1)
  File "C:\Python38\lib\site-packages\snap7\client.py", line 403, in read_area
    check_error(result, context="client")
  File "C:\Python38\lib\site-packages\snap7\common.py", line 89, in check_error
    raise RuntimeError(error)
RuntimeError: b'CLI : function refused by CPU (Unknown error)'
# 正确读出VB10
>>> 读出的字节组 = plc.read_area(Areas.DB,1,10,1)
>>> 读出的字节组
bytearray(b'\x1f')
>>> plc.read_area(Areas.DB,1,10,1)
bytearray(b'\x0f')
>>> dir(Areas)
['CT', 'DB', 'MK', 'PA', 'PE', 'TM', '__class__', '__doc__', '__members__', '__module__']
>>> Areas.PA
<Areas.PA: 130>
>>> type(Areas.PA)
<enum 'Areas'>
>>> Areas.PE
<Areas.PE: 129>
# 尝试写入数据,在step7上验证成功
>>> 读出的字节组[0] = 0xFF
>>> plc.db_write(1,10,读出的字节组)
>>> 
View Code

 

标签:__,200,字节,snap7,python,读出,read,plc
From: https://www.cnblogs.com/jichao1515/p/16981156.html

相关文章

  • Python学习笔记:行列转换小例子
    一、需求需将“宽数据”转换为“长数据”。二、实践1.构建测试集importpandasaspdimportnumpyasnp#创建测试集df=pd.DataFrame({'Year':[2017,2018......
  • Python编程写的圣诞树|一共六款|快拿去送给心爱的人吧
    先上图:上代码:定义背景t=turtle.Turtle()#定义速度#t.speed("fastest")#定义背景颜色screensize(bg='black')t.left(90)t.forward(3*n)#定义最上端星星......
  • python安装与配置
    1、官网下载:https://www.python.org/downloads/windows/  下载的exe包直接双击安装即可安装完毕后命令行直接可以运行python  2、python包安装python有大量的......
  • Python学习笔记:Jupyter Notebook插件之Nbextensions
    一、安装通过pip直接进行安装并激活。#下载安装pipinstalljupyter_contrib_nbextensions#添加工具栏jupytercontribnbextensioninstall安装完之后,打开Ju......
  • python对m3u8文件的简单处理(一)
    前言:最近一直在看python方面的知识,突然对python对视频如何处理非常感兴趣,于是百度一下,看看网上的方法,根据兴趣,试着从网上下载一个m3u8的实例看看。本实例为个人学习使用,试着......
  • python从中文数字数据区间提取minmax最小值、最大值返回pandas
    先上结果:定义转换函数代码:defrange2min(text):if'千'intext:text=text.replace('千','000')#替换中文为数字if'万'intext:text=tex......
  • P2057 [SHOI2007] 善意的投票
    传送门思路我们考虑将原本想同意的人连向源点,原本不同意的人连向汇点,流量皆为\(1\)。对于一对好朋友\(x,y\),我们连接\((x,y)\)和\((y,x)\)双向边,流量皆为\(1\)......
  • Python8-eg
    实例01(创建计算BMI指数的模块)1deffun_bmi(person,height,weight):2'''功能:根据身高和体重计算BMI指数3person:姓名4heigh......
  • python-flask03
    g对象g:global缩写是关键字所以不能用,只能写成了g。g对象是一个全局对象。作用:上下文*请求的是上下文,等请求进来就有。请求走了,还一直存在。*所以在当次请求过......
  • 进入python的世界_day51_Django之视图层、模板层
    一、路由分发django中应用都可以有自己独立的urls.py文件templates文件夹static文件夹能够让基于django开发的多个应用完全独立便于小组开发能分能收整个dj项目下......