我尝试使用它的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包装程序的步骤是:


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


如何在Windows上正确安装snap7?

[pip安装日志] [1]

最佳答案

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

参见图片了解详细信息:编辑环境变量

edit enviroment vars

为了给像我这样的新手提供一个良好的起点,这里提供了一个最小的snap7教程,该教程可以使用Python3从S7 1212C PLC读取数据库变量:

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设备的子网掩码范围内。如果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 Number and Variable Offsets

PLC配置

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

10-04 21:06