前兩天搞了一個西門子1214的PLC,以前跟樹莓派連過,想着沒事看看能跟筆記本連上讀個數據不。經過一晚上的努力,終於還是搞定了!把整個流程記一下。
首先是包的下載,直接通過pip下載就行了,
pip3 install python-snap7
可以在terminal里試一下,導入是沒問題的

但是對client實例化的時候還是會報錯

注意一下報錯的信息,是common.py文件里load_library里有點問題
在windows環境下,我們是通過兩個dll動態庫文件來執行程序的, 在linux下差不多,但是文件是so類型的。
下載snap7的完整程序包,這是我放在網盤里的程序包
https://pan.baidu.com/s/1rVoyAYmOOFPi43Ab_NFh0Q 密碼44ln
下載完了以后解壓,注意看一下readme文件,進入文件夾下build/unix路徑,看下readme里對應的系統版本,編譯文件,由於我的系統是x86架構,直接按照說明里的運行
sudo make -f x86_64_linux.mk all
然后就生成了我們需要的so文件,

對應的路徑就是我們執行的mk文件名,然后我們把這個文件復制到一個固定的地方
sudo cp /Desktop/snap7-full-1.4.2/build/bin/x86_64-linux/libsnap7.so /usr/lib/libsnap7.so
注意要記得后面那個地址,一會要用到
還記得前面報錯的commen.py文件么?直接vi進去修改
class Snap7Library(object): """ Snap7 loader and encapsulator. We make this a singleton to make sure the library is loaded only once. """ _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = object.__new__(cls) cls._instance.lib_location = None cls._instance.cdll = None return cls._instance def __init__(self, lib_location=None): #加上lib_location的地址 lib_location='/usr/lib/libsnap7.so' if self.cdll: return self.lib_location = lib_location or self.lib_location or find_library('snap7') if not self.lib_location: msg = "can't find snap7 library. If installed, try running ldconfig" raise Snap7Exception(msg) self.cdll = cdll.LoadLibrary(self.lib_location)
在構造函數中我們要加上lib_location的地址,就是前面復制到的地址。保存退出
然后就成功了!

試一下直接讀取PLC里db1里的數據

至於snap7具體的使用方法網上還是有不少的,直接搜就好了!
