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来个跑马灯。

python 小说 云_小说python操作PLC相关推荐

  1. python 小说 云_用python实现自己的小说阅读器

    前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本 ...

  2. python 小说 云_用Python爬下十几万本小说,再也不会闹书荒!

    自从看了师傅爬了顶点全站之后,我也手痒痒的,也想爬一个比较牛逼的小说网看看,于是选了宜搜这个网站,好了,马上开干,这次用的是mogodb数据库,感觉mysql太麻烦了下图是我选择宜搜里面遍历的网站 先 ...

  3. python 小说 云_小说python何时使用生成器

    生成器.迭代器作为python的两个高级特性,相信大家肯定耳熟能详,都能说道上一阵,但很多时候都是说说而已,知道有这么个东西,而且是好东西,但再看看写过的代码,有多少确实使用它的? 一个语音特性,在潜 ...

  4. python 词云_利用Python生成词云

    利用Python生成词云 一.第三方库的安装与介绍 1.1  Python第三方库jieba(中文分词) 1.介绍 "结巴"中文分词:做最好的 Python 中文分词组件. 2.特 ...

  5. 爱心 python 词云_爱心 python 词云_python 词云

    最近由于大屏项目需要生成一个词云所以这边做个记录 demo.py下: from os import path import chnSegment import plotWordcloud if __n ...

  6. 前锋python百度云_关于python:使用索引在pandas DataFrame中设置特定单元格的值

    我创建了一个熊猫数据框架 df = DataFrame(index=['A','B','C'], columns=['x','y']) 得到了这个 x    y A  NaN  NaN B  NaN ...

  7. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  8. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  9. python 小说 云_python小说网站

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python爬虫之小说网站--下载小说(正则表达式)思路:1. 找到要下载的小说 ...

最新文章

  1. 经典排序算法之直接选择排序
  2. python学习_22(文件)
  3. 5.MYSQL存储过程的管理
  4. 自然科学 计算机,计算机科学与自然科学技术的关系
  5. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)G GCD Guessing Game
  6. image pil 图像保存_使用PIL保存图像
  7. c语言if语句教学设计,c语言if语句教学设计.pdf
  8. 判断一个文本文件的编码格式
  9. 接口监控_从零开始入门 K8s | 可观测性:监控与日志
  10. Atitit.log日志技术的最佳实践attilax总结
  11. Java基础枚举(enum关键字)
  12. 烟花代码,予心上人最璀璨烟花—— 附源码与成品(HTML+CSS+JS)
  13. mrpoid模拟器java版_mrpoid2冒泡模拟器下载-mrpoid2模拟器下载3.0安卓版-西西软件下载...
  14. matlab高尔顿板钉试验,高尔顿钉板试验模拟
  15. 【C语言】百度搜歌(只用歌曲或者歌手名字去搜索实现)
  16. 计算机有线无线都无法上网,有线能上网无线不能上网 有线能用无线不能用
  17. 模拟信号与数字信号的本质区别
  18. Xmind用例导入到TAPD的方案(附代码)
  19. 微服务架构之限流熔断
  20. zeppelin 下载和安装

热门文章

  1. webstorm配置Monokai-Sublime.jar主题
  2. mysql 读写分离
  3. java乱码问题总结
  4. 关于数据结构的赋值,最好不要直接赋值,而是采用构造函数、或其它函数来赋值,这样可以方便控制---我自己!...
  5. 开发者账号申请 真机调试 应用发布
  6. 收集一些.NET开发资源站点和部分优秀.NET开源项目 (转)
  7. python-循环语句基础知识
  8. 【剑指offer】面试题19:正则表达式匹配(Java)
  9. Leetcode--3. 无重复字符的最长子串
  10. mimo雷达信号处理_雷达学术入门脉冲雷达信号处理概述