Ubuntu 通過snap7連接西門子1200


前兩天搞了一個西門子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具體的使用方法網上還是有不少的,直接搜就好了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM