2

我尝试使用它的 python-snap7 0.4 包装器安装 snap7(从 S7-1200 读取),但我总是使用以下简单代码进行回溯。

from time import sleep
import snap7
from snap7.util import *
import struct

plc = snap7.client.Client()

追溯:

 >>> 
Traceback (most recent call last):
  File "Y:\Lonnox\Projekte\Bibliothek\Python und SPS\S7-1200 Test.py", line 6, in <module>
    plc = snap7.client.Client()
  File "C:\Python34\lib\site-packages\snap7\client.py", line 30, in __init__
    self.library = load_library()
  File "C:\Python34\lib\site-packages\snap7\common.py", line 54, in load_library
    return Snap7Library(lib_location).cdll
  File "C:\Python34\lib\site-packages\snap7\common.py", line 46, in __init__
    raise Snap7Exception(msg)
snap7.snap7exceptions.Snap7Exception: can't find snap7 library. If installed, try running ldconfig

我安装 snap7 和 python 包装器的步骤是:

  1. 从 sourceforge 下载 snap7 并将 snap7.dll 和 snap7.lib 复制到 windows 8 的 system32 文件夹
  2. 使用 pip install python-snap7 安装包装器

如何在 Windows 上正确安装 snap7?

[pip 安装日志][1]

4

4 回答 4

4

经过一些尝试和错误实验以及涉及 snap7 的开发人员的一些信息,我解决了这个问题。snap7.dll 和 .lib 文件所在的文件夹必须存在于 Windows 的环境变量中。或者,如果您已从 Python 安装程序中选中“添加路径”选项,则可以将文件复制到 Python 安装目录。

有关详细信息,请参见图片:编辑环境变量

编辑环境变量

为了给像我这样的新手提供一个很好的起点,这里有一个最小的 snap7 教程,用于使用 Python3 从 S7 1212C PLC 读取 DB 变量:

import snap7
from snap7.util import *
import struct


plc = snap7.client.Client()
plc.connect("10.112.115.10",0,1)

#---Read DB---
db = plc.db_read(1234,0,14)
real = struct.iter_unpack("!f",db[:12] )
print( "3 x Real Vars:", [f for f, in real] )
print( "3 x Bool Vars:", db[12]&1==1, db[12]&2==2, db[12]&4==4 )


plc.disconnect()

IP 和子网掩码

PLC 的 IP 必须在 PC LAN Device 的子网掩码范围内。如果 LAN 设备的 IP 是 10.112.115.1 并且子掩码是 255.255.255.0,这将为您的 PLC 提供 10.112.115.2 到 10.112.115.255 的范围。此范围之外的每个 PLC IP 都会给您一个“无法访问的对等点”错误。

防火墙

确保您的防火墙允许您的 PC 和 PLC 之间的通信。

PLC 数据位置

如果您不熟悉 STEP 7/TIA Portal。查找“在线诊断”按钮并查看图片以查找数据的位置。

DB 编号和可变偏移量

PLC 配置

除了使用您要读取的变量的 PLC 程序外,PLC 无需其他部件即可与 snap7 通信。与 snap7 通信所需的服务由固件在开机时启动。

于 2015-11-20T13:31:48.543 回答
2

snap7.dll and snap7.lib 文件夹中复制"\snap7-full-1.2.1\release\Windows\Win64"粘贴它们。"C:\snap7-full-1.2.1\release\Windows\Win64"

然后“导入 snap7”正在工作。但它在下一步中给出错误。snap7.client.Client() -> AttributeError: 模块 'snap7' 没有属性 'client'

我使用了“https://github.com/gijzelaerr/python-snap7”项目。这是工作。

于 2020-07-13T06:37:46.453 回答
1

试试这个:在 snap7 文件夹中搜索 snap7.dll 和 snap7.lib 文件 将 snap7.dll 和 snap7.lib 复制到“C:/PythonXX/site-packages/snap7”目录并再次运行您的代码。您可以在同一目录中的 common.py 文件中找出这一点。

于 2016-07-07T17:15:55.773 回答
1

使用 snap7 的最新设置对我来说如下所示:

  • 通过“pip install python-snap7”在命令行中使用 pip 安装 snap7 for python

  • 从sourceforge下载最新的 snap7 包

  • 将 32 位或 64 位版本复制到任何文件夹,例如您的项目文件夹

  • 在你的 python 程序中做一个 import snap7
  • 在你的 python 程序中临时编辑你的环境变量

    #---Temporarily Change The Path Enviroment Variable For Snap7.dll---
    if not snapPath in os.environ["PATH"]:
        os.environ["PATH"] = os.environ["PATH"] + ";" + snapPath.replace("/","\\")
    

路径中的空格是允许的。这很好用,尽管如果您使用 xcfreeze 创建安装程序。

于 2016-07-09T11:30:35.447 回答