• 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具体的使用方法网上还是有不少的,直接搜就好了!

  • 相关阅读:
    JavaScript_01简介,基本语法,运算符
    JAVA_内部类
    JAVA_接口_默认方法&静态方法
    软件工程_01面向对象分析
    mybatis_16逆向工程
    mybatis_15整合ehcache
    mybatis_14二级缓存
    mybatis_13一级缓存
    mybatis_12延时加载_懒加载
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/13657904.html
Copyright © 2020-2023  润新知