树莓派4B上跑OpenPLC:从安装到第一个GPIO控制程序(保姆级避坑指南)
2026/4/27 15:40:01 网站建设 项目流程

树莓派4B上跑OpenPLC:从安装到第一个GPIO控制程序(保姆级避坑指南)

工业自动化领域长期被传统PLC设备垄断,而OpenPLC的出现为硬件爱好者打开了一扇低成本实践的大门。本文将带你用树莓派4B搭建完整的OpenPLC开发环境,从系统选择到第一个GPIO控制程序,全程避开那些官方文档没告诉你的"坑"。

1. 系统选择与基础环境搭建

官方推荐使用Raspberry Pi OS,但实测Ubuntu Server 20.04 LTS更稳定且资源占用更低。以下是具体配置步骤:

# 下载Ubuntu Server镜像 wget https://ubuntu.com/download/raspberry-pi/server # 刷写镜像到SD卡(假设SD卡设备为/dev/mmcblk0) sudo dd if=ubuntu-20.04-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0 bs=4M status=progress

系统启动后需要特别配置:

  • 启用SSH:sudo touch /boot/ssh
  • 扩展文件系统:sudo raspi-config --expand-rootfs
  • 安装基础工具包:
    sudo apt update && sudo apt install -y git build-essential python3-dev

注意:Ubuntu默认用户名为ubuntu,密码也是ubuntu,首次登录后请立即修改

2. OpenPLC运行时安装与排错

官方安装脚本在Ubuntu上会报错,主要问题集中在WiringPi库的缺失。以下是修正后的完整安装流程:

# 克隆OpenPLC项目 git clone --depth=1 https://github.com/thiagoralves/OpenPLC_v3.git cd OpenPLC_v3 # 手动安装WiringPi(官方源不包含开发文件) git clone https://github.com/WiringPi/WiringPi.git cd WiringPi ./build sudo ldconfig cd .. # 修改安装脚本跳过自动安装WiringPi sed -i 's/apt install -y wiringpi/# 已手动安装/' install.sh # 执行安装 ./install.sh rpi

常见错误及解决方案:

错误类型现象解决方法
WiringPi.h缺失编译时报头文件找不到手动编译安装WiringPi
libmodbus报错链接阶段失败sudo apt install libmodbus-dev
权限不足运行时GPIO操作失败将用户加入gpio组:sudo usermod -aG gpio $USER

3. 硬件配置与GPIO映射

OpenPLC使用特定的GPIO映射规则,与树莓派物理引脚对应关系如下:

PLC地址树莓派GPIO物理引脚功能
%IX0.0GPIO2引脚3数字输入
%QX0.0GPIO14引脚8数字输出
%IW0SPI0引脚19-21模拟输入

配置硬件接口:

  1. 登录OpenPLC网页界面(默认http://[树莓派IP]:8080)
  2. 进入Hardware标签页
  3. 选择"Raspberry Pi"硬件平台
  4. 点击"Save Changes"并等待重新编译

重要提示:修改硬件配置后必须重启OpenPLC服务才能生效:sudo systemctl restart openplc

4. 第一个控制程序:按钮联动LED

使用OpenPLC Editor创建简单逻辑:

  1. 下载并安装Editor(Windows/macOS/Linux版本均可用)
  2. 新建项目,选择"Standard Project"
  3. 拖拽以下元素到工作区:
    • 一个输入触点(对应%IX0.0)
    • 一个定时器模块(TON)
    • 一个输出线圈(对应%QX0.0)

程序逻辑配置:

// 按钮按下2秒后点亮LED VAR btn AT %IX0.0 : BOOL; led AT %QX0.0 : BOOL; timer : TON; END_VAR timer(IN:=btn, PT:=T#2S); led := timer.Q;

编译生成.st文件后,通过网页界面上传并启动PLC。实物连接方案:

  • 按钮连接引脚3(GPIO2)与GND
  • LED串联220Ω电阻连接引脚8(GPIO14)

测试技巧:

  • 使用gpio readall命令实时查看引脚状态
  • 遇到无响应时检查服务状态:journalctl -u openplc -f

5. 高级功能扩展

Modbus TCP通信配置

# 示例:Python读取OpenPLC寄存器 import pyModbusTCP.client modbus_client = pyModbusTCP.client.ModbusClient(host="树莓派IP") coils = modbus_client.read_coils(0, 1) # 读取%QX0.0状态

SCADA集成方案

  1. 安装Node-RED:sudo apt install nodered
  2. 添加modbus节点:npm install node-red-contrib-modbus
  3. 创建可视化控制面板

性能优化建议:

  • 调整PLC扫描周期(默认100ms)
  • 禁用未使用的硬件接口
  • 使用taskset绑定CPU核心

6. 实战经验与深度优化

在长期使用中发现几个关键优化点:

GPIO响应延迟优化修改/etc/rc.local添加:

echo 1 > /sys/class/gpio/gpio2/active_low echo 1 > /sys/class/gpio/gpio14/active_low

系统服务监控脚本

#!/bin/bash while true; do if ! systemctl is-active --quiet openplc; then echo "$(date) - Restarting OpenPLC" >> /var/log/openplc_monitor.log systemctl restart openplc fi sleep 30 done

硬件保护电路设计

  • 输入侧:加入光耦隔离(如PC817)
  • 输出侧:使用MOSFET驱动(如IRLZ44N)
  • 电源滤波:100μF电解电容并联0.1μF陶瓷电容

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询