嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

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

第 1 部分中,我向大家展示了硬件装置。RevPi 项目具有“开源”的特性,因此可以使用网络上提供下载的大量材料。然而这种灵活性的另一面是,我们需要安装并设置所有这些第三方组件,这些组件占项目的 90%。在本例中,我使用了我的朋友 Sven Sager 编写的库 REVPIMODIO 和 PEVPIPYPLC,前者在简化 IO 访问方面起到重要作用,而后者可以简化 MQTT。因此大家可能需要一点耐心。现在,让我们来逐步完成这些操作吧……

首先,切勿忘记在做出任何更改之前先备份 RevPi 固件。然后获得最新的固件升级并安装(详见这篇文章)。在这里,我将向大家简单介绍我是如何搭建“我的宝贝”的(我设计了 RevPi 产品并开发了硬件)。

我喜欢在“无头”模式下使用设备:没有 HDMI 显示器和键盘,仅连接 12 - 24V 直流电源,并将 RJ45 网络电缆连接到局域网交换机上。RevPi Core 的出厂默认模式为 DHCP 模式(从 DHCP 服务器/交换机获得未知 IP)。所以,我在个人电脑上使用“高级 IP 扫描工具”(点击这里免费下载)来查找 IP。

image0131_f5af640adcf3ed8358fc47cd6263aba965f0c3f2.jpg

在本例中,工具扫描出 IP 192.168.0.241(如果本地网络中有不止 1 个 RevPi,请检查 MAC 或名称 – MAC 和名称中的数字部分均印在橙色前板上)。

然后,我在装有 Windows 操作系统的个人电脑上运行 PuTTY(点击这里免费下载),以将 RevPi 连接 SSH(连接至端口 22)。RevPi 应弹出 Linux 登录提示,因为 SSH 默认启用:

image015_bb86ee8f6f7c95e424434f6459b95eb173455153.jpg

使用印在 RevPi 的外壳侧面的标签上的壳用户名,用户名默认为“pi”(Linux 区分大小写!)。密码默认具有唯一性,是通过散列算法从内部序列号得出的。密码同样印在标签上。请注意,RevPi 的键盘布局默认为德语。因此在使用英语键盘时,任何“z”和“y”都需要交换输入。登录后将会看见 Linux 提示。我的 RevPi 屏幕如下所示:

image017_73264d8e787a61092a539dd6f1e1685091f2d360.jpg

上述由 Sven Sager 编写的两个工具均可从 KUNBUS 存储库中安装。如此一来,安装变得相当简单:输入壳命令“sudo apt update”以列出软件包清单,接着输入“sudo apt install python3-revpimodio2”。然后通过命令“sudo apt-get install revpipyload”安装另一个工具。

使用 revpipyload 工具可在以太网上远程控制 Python“PLC”。它使用 XML-RPC(“可扩展标记语言远程过程调用”)。因此,我们需要通过编辑应用程序的配置,在 RevPi 上启用 XML-RPC 服务器。输入壳命令“sudo nano /etc/revpipyload/revpipyload.conf”并编辑 [XMLRPC] 部分,用“xmlrpc = 1”覆盖行“xmlrpc = 0”。针对所有不熟悉 Linux 的用户:这是未进入 GUI 模式的 RevPi 上的命令行编辑器。因此鼠标不可用(虽然可在 Windows GUI 上使用)。必须使用键盘上的箭头键导航至需要编辑的行。通过 Ctrl-X 退出命令行编辑器,并接受保存对指定文件所做的更改。

image019_d175a57bc99fc8a359e4b54127b885038b6b6566.jpg

我们应当配置对 RevPi 上 XML-RPC 服务器的访问权限。必须将 IP 掩码连同权限等级一起添加到配置文件 (“/etc/revpipyload/aclxmlrpc.conf”) 中。在本例中,我添加的是自己这台装有 Windows 操作系统的个人电脑的 IP 和 4 级访问权限(即最高权限等级)。于是,我输入壳命令“sudo nano /etc/revpipyload/aclxmlrpc.conf”,然后添加以下屏幕转存图片中的命令行:

image0211_174d563f78ecb92551751926e8416333a9e11903.jpg

由于在写入和调试 Python 软件时需要用到 RevPi 的 GUI,我们需要使用 HDMI 显示器、USB 鼠标和 USB 键盘,或者从个人电脑上使用远程桌面访问。正如上文中提到的,我喜欢在无头模式下使用 RevPi。因此我需要使用壳命令“sudo raspi-config”启用预先安装的“VNC 服务”。

由于在写入和调试 Python 软件时需要用到 RevPi 的 GUI,我们需要使用 HDMI 显示器、USB 鼠标和 USB 键盘,或者从个人电脑上使用远程桌面访问。正如上文中提到的,我喜欢在无头模式下使用 RevPi。因此我需要使用壳命令“sudo raspi-config”启用预先安装的“VNC 服务”。image0232_51c04bd8b9f6e253c8d0ed80ffae469093e69c51.jpg

我将光标移动至 5 号“Interfacing Options(接口选项)”,点击 <enter>(确定),出现以下内容

image025_cdf4541bbec05325cca4b85e8ae1344063b69441.jpg

这时我选择“P3 VNC”并点击 <enter>(确定)。在下一屏幕上,我通过选择“Yes(是)”启用 VNC:

image027_8bf071f196c990df4fda56fc7c414fac50e172ca.jpg

系统回复“VNC Server is enabled(VNC 服务器已启用)”。点击“Ok(确定)”确认此消息后,我接着设置“3 Boot Options(3 启动选项)”,因为我想让 RevPi 启动后进入 GUI 模式。打开启动子菜单后,我先后选择“B1 Desktop/CLI(B1 桌面/命令行界面)”和“B4 Desktop Autologin(B4 桌面自动登录)”:

image029_db67175a786e7ef7e2699f87aaaec59d782c9ddf.jpgimage030_d797dabb78fe8c1d4f7e27c36b04e225b505b13d.png

我需要选择 <Finish>(结束)以退出 raspi-config。当系统询问是否重启时,我选择“yes(是)”。

系统重启后,SSH 连接将断开。于是在 30 秒后,我右键点击 PuTTY 窗口顶部,然后选择“Restart Session(重新启动会话)”。

此外,我还需要在个人电脑上安装 VNC Viewer(点击这里免费下载)。安装好此应用程序后,我打开程序并输入 RevPi 的 IP 地址,然后进行连接。就这样,RevPi 桌面 GUI 以窗口的形式在我的个人电脑上神奇地打开了。image0321_718dbbaf548fc100f0a5482ffc927735fd960701.jpg

我可以使用基于浏览器的工具“PiCtory”来配置 RevPi 的 IO 系统(驱动器),方法是在 Firefox 上打开 RevPi 的 IP。但是首先需要登录 RevPi 的网络服务器。请注意,这里的默认用户不是“pi”,而是“admin”。但是密码是一样的(只要没有改过密码)。

在这里,我想谈几点关于安全问题的注意事项:

请勿将这些设置用于生产系统!

启动时无需登录直接进入 GUI 对于实验系统来说没什么问题。而生产系统则需要有唯一的强密码提供保护。此外,系统要么不连接互联网和任何访问策略欠佳的局域网,要么需要关闭内部网络服务器。就目前而言,我们确实需要网络服务器来运行“PiCtory”。

image0341_e81b312a999a2871fa3294e3991deac4ed8b094f.jpg

image036_05ac8dfbad9920c19ceb0e266c04bf5de2fd52cd.jpg

当我点击 APPS 表格中 PiCtory 行的“START(开始)”时,就打开了这一配置工具。请参考 RevPi 网页上的教程,以了解更多关于使用 PiCtory 的信息。在此,我将只简单地介绍我的系统,即 RevPi Core、DIO 和 AOI 模块按顺序安装在 DIN 导轨上。我将“RevPi Core V1.2”从“Base Devices(基础设备)”列表拖放至系统空槽“0”中。接下来,我将“RevPi DIO”从“I/O Devices(I/O 设备)”拖放至 Core 右侧的空槽中。然后,我再将“RevPi AIO”拖放至 DIO 模块右侧的空槽中。我的窗口和 DIN 导轨的视图如下所示:

image038_58748898cfb93af17bd2a524542f5dad47bb4778.jpg

这里有一些需要调整的配置值。我点击选中 AIO 模块以显示“value editor(参数编辑器)”。我滚动至 RTD1 部分并更改数值,如下图所示:

image040_a3c5d1cefb9a95eb254bc4c28c5c4a164bc6005f.jpg

我使用的是一个经过校准的 4 线 PT100 传感器,因此我保留了默认的刻度值(乘数、除数、补偿)以忽略缩放。温度值将存储在过程映像中,单位为 °C * 10(例如,25.4°C 将显示为 254)。请勿尝试使用除数 10 直接得出 °C 数值,因为这样会损失 1/10 °C 值(系统在过程映像中使用 2 字节整数,因此结果精度减小)。过程映像中存储数值的地址称为“RTDValue_1”,而我把它改成了“Temp10”(表示 °C 的乘数 10)。请不要忘记勾选“Export(导出)”复选框,因为 Sven Sager 的工具必须经过勾选才能使数值通过 MQTT 得到报告。

image042_43f1050bdac150338714c4d64897254cb0617964.jpg

现在,我们接着进行 DIO 模块的配置。我点击选中模块。右键点击参数编辑器中复选框一列的“Export(导出)”,弹出上下文菜单,接着我点击“Check NONE(全部取消)”以取消选中所有的数值。

image044_ee261342b954d570e6027965e185e8fa120d4186.jpg

然后我使用参数编辑器将输出“PWM_1”更名为“PWM_heater1”,并将“PWM_2”更名为“PWM_heater2”,接着更改了输出类型,如以下屏幕转存图片所示:

image046_7d100d5e8617d6d6d35eb93c17b39f6463273a71.jpg

我们需要输出 1 和 2 是“Highside Switch(高侧开关)”类型(默认类型),而不是“Push/Pull(推挽)”类型。后者将用于 FET 开关:一个将输出连接至 GND,数值为 0,另一个将它连接至正向 I/O 电源电压(通常为 24V),数值为 1。但是在此模式下,每个输出的电流上限仅为 100 mA,而在高侧开关模式下,当输出值设置为 1 时,从正向 IO 电源到 GND 的电流最高可达 500 mA。默认情况下,输出仅使用二进制值 0 或 1。仅当配置为“PWN active(PWN 激活)”时,它们才会使用无符号整数值“PWM_n”。如需设置任何输出至 PWM 激活,我们需要更改“OutputPWMActive”的数值。该数值属于位编码数值。这个字的每个位占一个输出。位 0 表示输出 1,位 1 表示输出 2,依次类推。将所有位的数值 2^n(n 为输出编号)相加,即得出配置字的数值总和。在本例中,这一计算过程相当简单:我们需要输出 1(位 0)和输出 2(位 1)为 PWM。由于 2^0 + 2^1 = 1+2 = 3,我们将 3 写入配置字中。我们将 OutputPWMFrequency 保留为最低值 40 Hz,因为这样可以得到 1% 的最高 PWM 分辨率。因此,如果在过程映像的“PWM_heater”位置中写入 50,则将在输出 1 得到 50% 的占空比。例如,如果数值为 12,则开通时间占 12%,关断时间占 88%,结果是脉冲开通 3 ms,关断 22 ms。

我需要保存该配置,并将它载入系统的驱动程序中。于是我点击菜单中的“File(文件)”,再点击“Save as Start-Config.(保存为 Start-Config.)”。然后,我点击“Tools(工具)”菜单中的“Reset Driver(重置驱动程序)”,这样便将配置载入了驱动程序并将它激活了。这时三个模块上的所有 LED 都应变为绿色。

我已经下载并安装了一种名为“RevPi PLC Control”的 Python 工具(点击这里免费下载),它相当于 Windows 电脑的 RevPiPyControl 软件。此工具可以使 RevPi 上 Python 脚本的保存和自动启动变得简单。但是,它同时还可通过 GUI 轻松查看过程映像的所有当前数值。您甚至还可通过此 GUI 设置数值。

image048_7b4dd3cce742e19c66fd5f41dafe582a048f86bb.jpg

通过“Main(主菜单)”打开“Connections…(连接…)”。通过输入名称和 IP 来新建连接。将“Port(端口)”保留为默认值 55123。点击“Apply(应用)”将新建连接添加到左侧的列表中。然后点击“Save(保存)”以保存此连接。最后,点击弹出消息框中的“Yes(是)”确认接受。

image050_2ae3260a117080de8c8f0f083adb6eb5b5c32bb8.jpg

这时如果点击“Connect(连接)”,则可以看见新建连接已列出。

image052_4a9560af02fc8a65467b976aba2cebe7a40d8e55.jpg

选中它,然后个人电脑将立即连接至 RevPi。忽略红色消息“FILE NOT FOUND(未找到文件)”,此消息仅表示尚无 Python PLC 程序保存至 RevPi。但是点击“PLC watch mode(PLC 查看模式)”可查看当前模块配置(“Devices of RevPi(RevPi 设备)”)。例如,如果点击“RevPi AIO”,将列出过程映像中的所有数值:

image054_561f1d9b5b9e4357919372dcc25a92dd82a861ca.jpg

Temp10 显示 402,这意味着我在办公室内接受 40.2°C 的高温炙烤(开个玩笑)。当我点击“RevPi DIO”时,则出现以下列表:

image056_8b9d9746807bb5fcf8f2268f5bd7d5a51056ebb9.jpg

即使在“PWM_heater1”中输入 25,也不会改变实际输出。首先,我们需要点击“Autorefresh values(自动刷新数值)”,接着点击“Write values to RevPi(向 RevPi 写入数值)”。这时会出现警告消息。如果您知道自己在做什么,则点击 OK,并在 PWM_heater 中输入 25,使输出 1 的占空比变为 25%。此时示波器屏幕如下所示:

image058_b7ad675174bcca66b45d9f521a8c3345a4fe7599.jpg

上文中大篇幅地介绍了安装和配置步骤。让我们稍作休息,然后我们会在第 3 部分中接着讲解 Python 程序。请不要错过,订阅文章!

Volker de Haas started electronics and computing with a KIM1 and machine language in the 70s. Then FORTRAN, PASCAL, BASIC, C, MUMPS. Developed complex digital circuits and analogue electronics for neuroscience labs (and his MD grade). Later: database engineering, C++, C#, industrial hard- and software developer (transport, automotive, automation). Designed and constructed the open-source PLC / IPC "Revolution Pi". Now offering advanced development and exceptional exhibits.