Python Snap7 Windows - не могу найти библиотеку Snap7

Я пытаюсь установить snap7 (для чтения из S7-1200) с его оболочкой python-snap7 0.4, но всегда получаю обратную трассировку со следующим простым кодом.

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. Загрузите snap7 из sourceforge и скопируйте snap7.dll и snap7.lib в папку system32 в Windows 8
  2. Установите обертку с помощью pip install python-snap7

Как правильно установить snap7 на windows?

[журнал установки pip][1]

3 ответа

Решение

После некоторых экспериментов с попытками и ошибками и с некоторыми сведениями о разработчиках Snap7 я решил проблему. Папка, в которой находятся файлы snap7.dll и.lib, должна присутствовать в переменных среды Windows. В качестве альтернативы вы можете скопировать файлы в установочный каталог Python, если вы установили опцию "добавить путь" в установщике Python.

См. Изображение для деталей: Редактировать Vars Enviroment

редактировать среду

Чтобы дать хорошую отправную точку для всех, кто любит меня, вот минимальное руководство snap7 для чтения переменных БД из ПЛК S7 1212C с Python3:

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 и маска подсети

IP-адрес ПЛК должен находиться в диапазоне маски подсети ПК LAN Device. Если IP-адрес устройства локальной сети равен 10.112.115.1, а подмаска - 255.255.255.0, это дает вам диапазон от 10.112.115.2 до 10.112.115.255 для вашего ПЛК. Каждый IP ПЛК, выходящий за пределы этого диапазона, выдаст ошибку "Недостижимый узел".

Брандмауэр

Убедитесь, что ваш брандмауэр обеспечивает связь между вашим ПК и ПЛК.

Расположение данных ПЛК

Если вы не знакомы с STEP 7/ TIA Portal. Найдите кнопку "Онлайн-диагностика" и посмотрите фотографии, чтобы найти местоположение ваших данных.

Номер БД и смещения переменных

Конфигурация ПЛК

Помимо программы ПЛК, которая использует переменные, которые вы хотите прочитать, ПЛК не требует дополнительных частей для связи с snap7. Службы, необходимые для связи с snap7, запускаются микропрограммой при включении питания.

Копировать snap7.dll and snap7.lib от "\snap7-full-1.2.1\release\Windows\Win64"и вставьте их в"C:\snap7-full-1.2.1\release\Windows\Win64" папка.

тогда "import snap7" работает. но на следующем шаге выдает ошибку. snap7.client.Client() -> AttributeError: модуль 'snap7' не имеет атрибута 'client'

Я использовал проект https://github.com/gijzelaerr/python-snap7. это работает.

Последняя настройка для использования snap7 выглядит для меня следующим образом:

  • установите snap7 для python с pip в командной строке с помощью "pip install python-snap7"

  • загрузите последний пакет snap7 с sourceforge

  • скопируйте 32- или 64-битную версию в любую папку, например папку вашего проекта

  • сделать импорт snap7 в вашей программе на Python
  • временно отредактируйте переменные окружения в вашей программе на 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 файлы snap7.dll и snap7.lib. Скопируйте файлы snap7.dll и snap7.lib в каталог "C:/PythonXX/site-packages/snap7 " и снова запустите код. Вы можете выяснить это в файле common.py в том же каталоге.

Другие вопросы по тегам