PYTHON – 让“Monty 语言”进入自动化行业:第 4 部分

现在我们开始第 4 部分的介绍,如果需要回顾往期内容,请阅读第 1 部分、第 2 部分和第 3 部分。

我们将在运行 PID 控制器的同一个 RevPi 系统上运行我们系统的 GUI,它可以通过任何浏览器访问。但是首先,我们需要安装 MQTT 代理。

我们返回 PuTTY 会话,然后使用以下命令在此系统上安装 MQTT 代理。

sudo apt-get install mosquitto mosquitto-clients

MQTT 代理的任务是什么?它接受来自客户端的数值。客户端在“主题”(有点像已命名的容器)下“发布”这类“数据记录”。其它客户端可以“订阅”这类主题。一旦新的数值发送至代理,代理会将该数值转发至所有已订阅该数值主题的客户端。您可以通过加密来保护此数据分配的安全,但在本次演示中,我放弃使用加密以简化步骤。

可以将 RevPiPyLoad 服务配置为将来自标记为“export(导出)”的过程映像的所有 IO 值发布至 MQTT 代理。让我们返回到 RevPiPyControl 应用程序,然后打开“PLC”->”PLC options…(PLC 选项…)”。这时将会出现一个新的窗口,如下所示:

勾选“RevPiPyLoad server services(RevPiPyLoad 服务器服务)”部分中的“MQTT process image publisher(MQTT 过程映像发布器)”,然后点击“Settings(设置)”。请使用本次演示的屏幕转存图片中的设置。如果您在网络中的任何位置使用 MQTT 代理,应当考虑延长发布间隔时间,例如从 1 秒延长至 10 秒。

点击两次“Save(保存)”,然后 RevPi 立即开始将来自过程映像的数据记录发布至 Mosquitto MQTT 代理。任何客户端均可订阅主题RevPiProcessImage/event/PWM_heater1

RevPiProcessImage/event/PWM_heater2

RevPiProcessImage/event/Temp10

RevPiProcessImage/io/PWM_heater1

RevPiProcessImage/io/PWM_heater2

RevPiProcessImage/io/Setpoint

RevPiProcessImage/io/Temp10

以接收发布的数值。

我们将使用 Node-Red 作为 MQTT 客户端来订阅这些数值,并将它们显示在 UI 上。Node-Red 是一款出色的“拖拽式软件制作工具”。它原本由 IBM 开发,后来 IBM 将它提供给 JS-Foundation 的开放源池。IDE 基于浏览器工作,因此可以轻松建立所谓的消息“流”。只需将“节点”组件从一系列预定节点中拖拽出来组成流即可。然后使用鼠标将节点输出“接线”(连接)至节点输入。对于所有的节点,均可通过点击参数来配置相应的参数。

Node-Red 预装在所有的 RevPi 上,并且该服务器服务只需启动即可。使用以下命令(使用 PuIIY 会话)即可永久启用并启动 Node-Red:

sudo systemctl enable nodered.service sudo systemctl start nodered

如果您已经对“流”进行了编程并已保存(“部署”),那么在启动后将会自动执行流(现在无需重新启动,Node-Red 已手动启动)。

我们需要向 Node-Red IDE 中添加新的“节点”,因此我们用以下命令安装“npm”(JavaScript 运行时系统“Node.js”的包管理器):

sudo apt-get install npm

马上就完成了,接下来只需建立流即可。我可以通过个人电脑上的浏览器使用以下 IP 和端口地址访问 IDE:http://192.168.0.241:1880(您需要使用自己的 RevPi 的 IP 取代以上内容)。IDE 语言是浏览器的首选语言。

在左侧工具栏中,您可以找到所有的“节点”,您可以将它们拖放到窗口中央的空白流上。我们需要添加仪表板 (UI) 节点。有了 npm,只需点击菜单图标(右上角)并选择“Manage Palette(管理面板)”即可快速完成这一操作。选择“install(安装)”选项卡并输入“dashboard(仪表板)”作为搜索字符串。等待系统显示搜索结果,选择“node-red-dashboard”并点击“install(安装)”。然后关闭 Palette Manager(面板管理器)并刷新浏览器 (F5)。现在,您可以在左侧面板的标题“dashboard(仪表板)”下方找到新安装的节点。

找到面板中的“input(输入)”部分,然后将 mqtt 节点拖放到流区域。双击节点进行配置:

输入主题“RevPiProcessImage/io/Temp10”并点击“Done(完成)”。我们想让温度值以 °C 为单位显示,因此需要将来自过程映像的数据记录(从 MQTT 代理接收)乘以 10。这可以通过“function(函数)”节点(位于“function(函数)”部分下方的第一个节点)实现。将它拖放到 mqtt 节点的右侧,然后双击进行配置:

“Function(函数)”编辑器允许输入 Java 代码。所有的节点都认识对象“msg”,即流入节点以及由节点发出的消息。为了更改消息的内容,我们使用它的“payload(有效负载)”(即所有节点消息的主要内容,您可以特意添加任何新的内容变量)。于是,只需输入 msg.payload = msg-payload/10 即可达到目标。点击“Done(完成)”。

现在添加两个仪表板节点,并将它们拖放到函数节点的右侧:

测量仪节点和图表节点的配置如下所示:

现在我们连接(“接线”)节点:点击一个节点右边缘上的小圆圈(即节点输出),按住鼠标键不放,然后向另一个节点左边缘上的圆圈(即输入)画一条线。可以看到,一个圆圈可连接多条线。

蓝色圆点表示未保存的(“未部署的”)节点。所以我们点击“Deploy(部署)”,然后我们的流得到执行。只要收到 MQTT 消息,其数值都会乘以 10 并用作 UI 元素的输入值。但是怎样才能看到结果呢?这很简单:只需打开浏览器窗口,输入 http://192.168.0.241:1880/ui(请用您自己的 RevPi 的 IP 取代以上 IP)即可:

使用右侧菜单“dashboard(仪表板)”,将 UI 页面名称 (“Home”) 和组名 (“Default”) 编辑为自定义文本:

我把添加 PWM 值的图表和测量仪作为学习任务留给大家。这里,大家应当使用 MQTT 主题“RevPiProcessImage/event/PWM_heater1”。

至此,如果您对我们的演示项目还满意,可以跟着我学习添加设定点滑块:

我将一个滑块拖放到流,并将流添加至第三个名为“Setpoint”的 UI 组(我使用 30 - 50°C 的范围,步长为 0.5,并将输出设置为“only on release(仅在释放时)”)。我将此节点连接至一个 mqtt 输出节点。mqtt 输出节点配置为发布主题“Setpoint”:

我们使用 Python 软件订阅此数值,并用它取代定值作为 PID 函数调用的设定点。因此,我们需要安装名为“paho mqtt”的 Python MQTT 客户端库。使用 PuTTY 并输入

sudo pip3 install paho-mqtt

然后编辑 Python 代码。添加库的导入语句。添加由 “def” 语句组成的所谓“回调”函数。每当已订阅的主题收到来自 MQTT 代理的新消息时,Paho MQTT 客户端就会调用此函数。凭借五条额外的代码行,我们初始化并启动了 MQTT 客户端,同时订阅“Setpoint”。

from simple_pid import PID import revpimodio2 import time import paho.mqtt.client as mqtt def on_message(client, userdata, message):    TempController.setpoint = int(float(message.payload)*10) client = mqtt.Client("myplc") client.connect("localhost") client.on_message=on_message client.subscribe("Setpoint",2) client.loop_start() TempController = PID(5,0.13,10.5,sample_time=0.1, setpoint=400, output_limits=(0,100)) rpi = revpimodio2.RevPiModIO(autorefresh=True) while True:    Temp = rpi.io.Temp10.value    pwm = TempController(Temp)    rpi.io.PWM_heater1.value = int(pwm)    rpi.io.PWM_heater2.value = int(pwm)    time.sleep(0.05)

现在,让我们将此脚本保存在 RevPiPyLoad 的“自动执行文件夹”中,路径为“/var/lib/revpipyload”,将它命名“program.py”(这两个参数可在配置文件中更改,您已经在我们的小项目开始时编辑过它)。此操作无法通过 IDLE 编辑器中的“save as …(保存为 …)”完成,因为路径“/var/”需要管理员权限才能写入文件。因此,我们最后一次使用 PuTTY,并输入 Linux 命令

sudo mv ~/myplc.py /var/lib/revpipyload/program.py

“Sudo”就是给予您管理员权限以便执行这一命令的神奇词语。

在 RevPiPyControl 窗口中,点击“PLC restart(PLC 重启)”,然后红色错误消息应当消失。绿条表示 Python PLC 脚本成功启动:

我希望大家能够成功地按照上述逐步说明进行操作。尽管需要完成大量的配置,但是最后仅有 19 行 Python 代码(我删除了调试打印代码)。为何不试试 IBM Watson 节点呢?您将会对云数据上传的简易程度感到非常欣喜(对于实验目的,可以使用 IBM 提供的免费“Quickstart”访问权限)。访问此地址,看看我的设备是否已经上线,以及我办公室里的温度是多少。如果您在尝试制作 RevPi Python 控制器时遇到任何问题,请在此留言或者发送消息给我。RevPiModIO 的编写者 Sven Sager 想和大家分享一些如何将本次演示扩展至专业版本的构想。他也许很快会在评论区发表他的想法。因此,如果您想进一步探索 Python 在自动化中的应用潜力,欢迎继续关注本文。

原文链接:https://www.rs-online.com/designspark/python-monty-4

python自动化plc_PYTHON – 让“Monty 语言”进入自动化行业:第 4 部分相关推荐

  1. monty python读音-PYTHON – 让quot;Monty 语言”进入自动化行业:第 1 部分

    只需以下 11行 Python语句,就能使用 Revolution Pi平台构建基于 PID控制的加热系统: from simple_pid import PID import revpimodio2 ...

  2. 电气自动化需要学c语言,电气自动化专业需要学C语言吗?

    电气工程及其自动化专业要学C语言. 1.专业学位课程: 高等数学.电路原理.电子技术基础.微型计算机技术.计算机网络 .电机学.自动控制理论.电力系统分析.电力系统继电保护.C语言.C++. 2.专业 ...

  3. python语言+selenium自动化,编写脚本调用Chrome、Firefox浏览器打开百度网站

    python语言+selenium自动化,编写脚本调用Chrome.Firefox浏览器打开百度网站 目标:初始化一个webdriver实例对象driver,通过webdriver.Chrome()和 ...

  4. python自动化办公入门书籍-Python如此神奇,让繁琐工作自动化 (文中含Python基础)...

    原标题:Python如此神奇,让繁琐工作自动化 (文中含Python基础) "你在2个小时里完成的事,我们3个人要做两天."21世纪早期,我的大学室友在一个电子产品零售商店工作.商 ...

  5. 《Python编程快速上手——让繁琐工作自动化》——第一部分 Python编程基础 第1章 Python基础 1.1 在交互式环境中输入表达式...

    本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第1章,第1.1节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...

  6. 《Python编程快速上手 让繁琐工作自动化》pdf

    <div id="article_content" class="article_content tracking-ad" data-mod=" ...

  7. java自动化_作为测试工程师进阶自动化选Java还是Python?

    这是很多测试工程师从功能跨入自动化纠结的问题,今天本文带大家一探究竟. Java和Python一直都是两种很火的语言,用Python的一定觉得Python好,用Java的只觉得Java好. Java语 ...

  8. python编程快速上手 让繁琐工作自动化 豆瓣_2019年,这些豆瓣评分9.0以上的8本程序员好书你都知道吗?...

    豆瓣这些9.0以上的高评分程序员好书你都知道有哪些吗?小编去豆瓣看了一下,推荐这8本最适用的程序员好书给你. 1.UNIX环境高级编程(第3版)(豆瓣评分9.6)UNIX编程圣经 与Linux相结合的 ...

  9. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...

    image.png <Python编程快速上手 让繁琐工作自动化>完整版PDF 提取码:7qm4 3.jpg 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 ...

  10. 写游戏自动化脚本用哪个语言好

    写游戏自动化脚本可以使用多种语言,具体选择哪种语言取决于您的需求和技能. 一些常用的语言包括 Python, JavaScript, Ruby 和 C#. 如果您对编程经验较少,可以考虑使用 Pyth ...

最新文章

  1. java ftp模糊查询_linux怎么模糊查找一个文件
  2. Earth to developers: Grow up!
  3. java实现md5加密示例
  4. python读书笔记2000_流畅的Python读书笔记
  5. void readstring( char s[] ); 怎样_char *s和char s[]
  6. C#初学者们,请离代码生成器远点!!!
  7. POJ3251 Big Square【水题】
  8. 【王道计组笔记】总线(1):总线的概念和分类
  9. php7安装详解、,php7安装详解(windows环境)
  10. Android:简易计算器
  11. 项目管理过程组与知识领域关系
  12. 深扒:基于UEBA的数据使用安全防护
  13. 【Shader特效10】体积雾特效的使用
  14. Galaxy S9最新谍照曝光 采用新款DeX扩展坞
  15. 百度贴吧前负责人:做产品16年,我有9条心得
  16. 每个机器学习工程师都应该知道的机器学习算法
  17. SpringBoot Junit单元测试
  18. 逻辑回归与softmax回归
  19. 信号分析——导数(Java/Matlab)
  20. yolov3识别的类别_YOLO v3实战之钢筋数量AI识别(一)

热门文章

  1. 箱形图适用于哪种数据_Excel 数据可视化:箱形图全面解析!
  2. 安装postgresql出现问题合集(Fatal errorThe pgAdmin 4 server could not be contacted:
  3. postgreSQL安装成功后打开pgadmin4出现错误:Fatal error:The pgAdmin 4 server could not be contacted:
  4. 什么是信息安全,怎么保障信息安全?
  5. python mysqldb_python mysqldb 教程
  6. android 钢琴识别音阶对错_练习音阶琶音的方法——你确定自己没弄错?
  7. 计算机型号或配置,新手必看电脑配置及型号含义速成!
  8. WPF TextBlock Trimming
  9. visio画图复制粘贴到word_VISO复制到WORD中全是空白框
  10. java软连接_硬链接和软连接