python snap7 windows - 找不到 snap7 库

python snap7 windows - can't find snap7 library

我尝试使用它的 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
  2. 的 system32 文件夹
  3. 使用 pip install python-snap7 安装 wrapper

如何在 windows 上正确安装 snap7?

[pip 安装日志][1]

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

详情见图片:编辑环境变量

edit enviroment vars

为了给像我这样的新手一个良好的起点,这里提供了一个最小的 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 设备的 IP 是 10.112.115.1 并且子掩码是 255.255.255.0,那么您的 PLC 的范围是 10.112.115.2 到 10.112.115.255。每个超出此范围的 PLC IP 都会给您一个 "Unreachable peer" 错误。

防火墙

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

PLC 数据位置

如果您不熟悉 STEP 7/TIA Portal。寻找 "Online Diagnostics" 按钮并查看图片以找到您的数据的位置。

DB Number and Variable Offsets

PLC 配置

除了使用您要读取的变量的 PLC 程序外,PLC 不需要额外的部件即可与 snap7 通信。与snap7通信所需的服务由固件上电启动。

试试这个: 在 snap7 文件夹中搜索 snap7.dll 和 snap7.lib 文件 将 snap7.dll 和 snap7.lib 复制到 "C:/PythonXX/site-packages/snap7 " 目录中,然后 运行 您再次编码。您可以在同一目录中的 common.py 文件中找到它。

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

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

  • sourceforge

  • 下载最新的snap7包
  • 将 32 位或 64 位版本复制到任何文件夹,例如您的项目文件夹

  • 在您的 python 程序中导入 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 创建安装程序。

复制 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”项目。它正在工作。