python 小说 云_小说python操作PLC

PLC(Programmable Logic Controller)可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制中,如楼宇智控、精密机床、汽车电子等等。

随着物联网的兴起,越来越多的传统工业设备需要和外界通信,但很多情况下,类似PLC这种微控制器,由于自身硬件的因素,无法直接与外界互联互通,通过PC这种上位机作为一个中介桥梁,为PLC与外界沟通打开了一扇门。

Python作为当前最火的语言,在AI、云计算等诸多方面都能看到它的身影,当然在工业控制中,也不能少了它。

这里,就小说一把如何使用Python构建PC与PLC的通信,也算show一把Python在工控领域的风采。

Snap7简介

当前市场上主流的PLC通信方式为网络通信和串行通信。网络通信这块主要协议有profinet,modbus-tcp等,串行通信主要是基于RS232/485的modbus居多。

本次接触到的是西门子S7系列的PLC,通信方式都为网络型的,而Snap7正是一个开源的、32/64位的、多平台的以太网通讯库:

支持多硬件体系结构(i386/x86_64、ARM/ARM64、Sun Sparc、Mips)

支持多系统(Windows、Linux、BSD、Solaris)

支持多语言(C/C++、Phyton、Node.js、Pascal、C#、VB)

官网为: http://snap7.sourceforge.net/

Python对其进行了封装,具体可以参见:

https://github.com/gijzelaerr/python-snap7

开发环境搭建

这里主要从Windows和Linux(Ubuntu)两个平台,说说如何搭建Python环境下的Snap7开发环境。

Python的安装这里就不再赘述,环境搭建主要就是Snap7和python-snap7两个库的安装。

1

安装Snap7

Windows下,需要根据Python的结构版本(32位/64位),将下载的Snap7的发布库copy到对应的Python安装根目录下即可。

如上图所示,我的python是32bit,所以需要将Snap7中Win32目录下的文件copy到python的安装根目录下,如下图所示:

Linux(Ubuntu)下安装,相对简单些,按如下命令即可:

2

安装python-snap7

snap7的python库安装就简单很多了,不管是Windows还是Linux,直接pip安装即可。

经过上面两步,环境就算搭建好了,通过一个连接测试代码试试,判断下环境是否搭建正常。

如果是下图提示,则环境正常(192.168.0.1的PLC不存在)

如果是下图提示,则环境异常(snap7库安装不正确)

读写PLC

环境搭建正常后,在正式建立通信前PLC还需做些配置工作,主要是开发自身的读写权限,具体参照下图配置:

通过上述配置,PLC可以正常通信了。

1

python-snap7读写分析

结合python-snap7的文档API和源码分析,python-sna7重要的两个方法是read_area和write_area,通过这两个方法就能读和写PLC的对应存储地址。

从参数可见,需要提供PLC的区域地址、起始地址、读和写的数据长度。

区域地址什么东西,PLC能提供的是如下信息:

PLC程序员的眼里只有I、M、Q、DB,

python程序员,现在慌了一比,这是what?

如何才能看到PLC程序员眼里的美丽风景,就得多看一眼PLC了。

2

PLC数据存储和地址

通过阅读PLC的手册,获取到了如下信息:

PLC的数据存储通过tag的形式与存储区间关联,分为输入(I)、输出(O)、位存储(M)和数据块(DB),程序在访问对应(I/O)tag时,是通过访问CPU的Process Image Out,对相应地址进行操作,具体对应关系如下:

到这里就能明白python-snap7中定义的areas地址是什么含义了。

现在离读写PLC还差最后一步,就是起始地址如何确定呢?

从上可见对于M3.4,对应的就是M(0x83),起始地址是3,对应bit位是4。

实战

经过上面的精心准备,下面就来一波实战。

通过读写PLC的M10.1、MW201来具体看看如何读写PLC。

从代码可见,MW201,根据M确定area为MK,根据W确定数据amount为2Btye,根据201确定start为201,读出来的数据根据数据长度用struct进行unpack,写数据对应strcut的pack。

这里给出PLC变量类型和大小,这样对应确定读写的amount。

最后给出一段视频,python操作PLC来个跑马灯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stream去重_使用Java Stream API中DistinctBy删除重复数据

Stream API提供distinct()方法,该方法基于数据Object类的equals()方法返回列表的不同元素。下面先做一个数据Object类,用来发现重复数据:public class LegacyObject {private final UUID id;private final String foo;private final int bar;…

Spring的AOP-AspectJ注解方式

目录 Spring的AOP-AspectJ注解方式 1.创建类,在类里面定义方法 2.创建增强类 3.进行通知的配置 (1)在Spring 配置文件中,开启直接扫描 (2)使用注解创建User 和 UserProxy 对象 (3&#x…

python turtle绘制柱状图_python绘制图形(Turtle模块)

用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法。 需要用到的工具有python,python 的安装这里就不再细说。自行搜索。 from turtle import * #引入turtle模块 color(red, yellow) #设置绘制的颜色和填充颜色 # 海龟设置 hideturt…

laravel商品图片怎么展示_如何使用Laravel图片处理包intervention-image

下面由Laravel教程栏目给大家介绍如何使用Laravel图片处理包intervention-image,希望对需要的朋友有所帮助!最近偶然发现了Laravel可用的图片处理包intervention-image。文档地址:http://image.intervention.io安装起来也很简单。composer re…

JdbcTemplate(概念和准备)

目录 1.什么是jdbcTemplate 2.使用前准备工作: (1)引入相关jar包 (2)在spring 配置文件配置数据库连接池​ (3)配置jdbcTemplate 对象,注入 DataSource (4&#xf…

python shape函数_Python中的多态及抽象类

本书同名免费MOOC《Python编程基础及应用》在哔哩哔哩(B站)热播,作者带着你学。版权声明:本文内容引用自作者的图书《Python编程基础及应用》(高等教育出版社)。本文可以在互联网上转载传播,但必须包含文中的版权声明;本文不可以以…

idea搭建maven项目关于数据库连接jar包版本问题解决方案

SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required 将mysql-connector-java由5.1.34升级到了6.0.6,本机MySQL5.7使用没问题,连测试服务器MySQL5.5创建数据库连接报错 解决方案: 将mysql-connector-java的版本退回到5.1.34…

二叉树的递归遍历|前中后序遍历、最大深度、最大直径

二叉树的递归遍历 前序遍历 public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();if (root null) {return res;}res.add(root.val);if (root.left ! null) {res.addAll(preorderTraversal(root.left));}if (roo…

python对象的三个属性_Python 对象属性的访问

在 Python 中&#xff0c;一切皆对象。属性访问可以理解为是从一个已有的对象中获得另一个对象的方法。对象属性的访问涉及到对象的 __dict__ 属性、描述符等概念&#xff0c;以及 __getattribute__、__getattr__ 等方法。 对象字典属性 Python 中的对象有一个 __dict__ 属性&a…

JdbcTemplate(操作数据库-添加功能)

目录 JdbcTemplate&#xff08;操作数据库-添加功能&#xff09; 1.建立数据库表&#xff1a; 2.对应数据库创建实体类&#xff1a; 3.编写service 和 dao &#xff08;1&#xff09;在 dao 层进行数据库添加操作 &#xff08;2&#xff09;具体&#xff1a;调用jdbcTemp…

python读取大文件csv_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 实现读取csv文件&#xff0c;文件里面是有限个百分数成绩&#xff08;99.6、76.8等等&#xff09;导出GPA 和等级代码是这样&#xff0c;但是报错了&#xff0c;在score float(sc)这行就报错了&#xff0c;下面有没有错误还不知道…

JdbcTemplate(操作数据库-修改和删除功能)

目录 JdbcTemplate&#xff08;操作数据库-删除功能&#xff09; 1.创建数据库 2.配置文件实现 3.创建实体类 4.创建dao层 5.创建service层 6.测试类 7.测试结果&#xff1a; JdbcTemplate&#xff08;操作数据库-删除功能&#xff09; 1.创建数据库 user_db数据库的t_…

单片机定时器实验两位倒计时秒表_51单片机基础与应用8天速成(三)

在讲授中断这一概念时&#xff0c;人们总是喜欢举洗衣服烧水的例子&#xff1a;话说&#xff0c;一天“你”独自在家&#xff0c;为了泡脚给自己烧上了一壶水&#xff0c;然后想着明天没有衣服穿了&#xff0c;就去阳台洗起了衣服。过了十几分钟&#xff0c;“你”在阳台洗着衣…

网线制作ppt_快速制作PPT技巧!

为什么同样的PPT&#xff0c;你花费了一天&#xff0c;我却只用了一小时&#xff1f;在我仔细观察了一些制作人员的操作后&#xff0c;总结了如下实用技巧&#xff01;01自定义访问工具栏在PPT中我们有很多的常用操作&#xff0c;例如「左对齐/右对齐」「置于底层/置于顶层」「…

JdbcTemplate(操作数据库-查询返回值)

目录 JdbcTemplate&#xff08;操作数据库-查询返回值&#xff09; 1.创建数据库 2.创建实体类 3.创建dao层 4.创建service层 5.创建测试类&#xff1a; 6.xml配置 7.测试结果&#xff1a; 8.结构示意&#xff1a; JdbcTemplate&#xff08;操作数据库-查询返回值&…

c++opencv显示中文_OpenCV安装,配置和运行

今天小崔有个项目功能想用OpenCV软件库实现一下&#xff0c;就安装了OpenCV,在这里给大家分享一下安装过程。一.什么是OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量…

qt 当前窗口句柄_QT获取Windows系统所有窗口句柄

#include #include #pragma comment(lib,"user32.lib")/* 回调函数&#xff0c;用于捕获进程 */BOOL MyEnumProc(HWND hwnd, LPARAM param){LPWSTR lpString (LPWSTR)malloc(sizeof(WCHAR) * MAX_PATH);if (IsWindow(hwnd) &&IsWindowEnabled(hwnd) &&a…

JdbcTemplate(操作数据库-查询返回对象、查询返回集合)

JdbcTemplate&#xff08;操作数据库-查询返回对象、查询返回集合&#xff09; 1.创建数据库 数据库中有三条记录&#xff0c;数据库名为user_db&#xff0c;数据库表为t_book 2.新建实体类&#xff1a; Book类中的每一个属性对应数据库中的一条记录 package org.example.sp…

hbase 查询设置超时_hbase master挂掉-zookeeper连接超时原因

并行运行hbase删表&#xff0c;建表操作&#xff0c;多个表多个region&#xff0c;导致hbase挂掉。查看日志&#xff1a;从日志中可以看出GC时间过长导致zookeeper连接超时&#xff0c;master退出。(是master退出而不是regionserver退出是因为进行的操作是建表&#xff0c;删表…

机器学习如何计算特征的重要性_机器学习之特征工程

特征选择是特征工程中的一个子集&#xff0c;从所有的特征中&#xff0c;选择有意义的&#xff0c;对模型有帮助的特征&#xff0c;以避免将所有特征中对模型没作用的特征导入模型去训练&#xff0c;消耗不必要的计算资源。更正式地说&#xff0c;给定n个特征&#xff0c;我们搜…