快速开始 | thiagoralves/OpenPLC

快速开始

目录

介绍

项目结构

核心组件

架构概览

详细组件分析

依赖关系分析

性能考虑

故障排除指南

总结

附录

介绍

OpenPLC 是一个开源的可编程逻辑控制器(PLC),旨在为工业自动化和研究提供低成本解决方案。它包含两个主要子项目:运行时(Runtime)和编程编辑器。运行时主要负责执行PLC逻辑和硬件交互,编程编辑器用于开发PLC程序。

本指南帮助新用户从零开始搭建OpenPLC_v3运行环境,涵盖环境要求、依赖安装、基础配置和首次运行操作,确保用户能顺利完成初次部署。

项目结构

项目主要分为以下几个部分:

mermaid

根目录:包含项目说明(README.md)、安装脚本(install.sh)、Dockerfile和Python依赖(requirements.txt)。

webserver目录:包含Python实现的Web服务器代码,负责用户界面和后台管理。

core目录:PLC运行时核心,采用C++实现,包含主程序main.cpp和工具函数utils.cpp,硬件抽象层代码分散在hardware_layers子目录。

utils目录:包含第三方库和工具。

文件命名规范清晰,功能模块划分明确,便于维护和扩展。

核心组件

main.cpp:OpenPLC运行时主程序,负责初始化硬件、网络、启动主循环,周期性执行PLC逻辑。

utils.cpp:实现时间控制、日志管理、特殊功能处理、输出禁用等辅助功能。

webserver.py:基于Flask的Web服务器,提供用户交互界面和程序管理。

openplc.py:后台管理脚本,处理OpenPLC控制台的非阻塞输出和状态监控。

硬件抽象层:多种硬件平台支持代码,通过回调接口实现输入输出的统一访问。

架构概览

OpenPLC运行时架构包含以下模块:

mermaid

Web服务器负责用户界面和程序上传。

运行时核心处理PLC逻辑,周期性读取输入、执行程序、写输出。

硬件抽象层屏蔽不同硬件差异。

持久化存储用于保存配置和程序状态。

支持多种工业协议如Modbus、EtherCAT和Snap7。

详细组件分析

1. main.cpp(运行时主程序)

负责系统初始化和主循环。

主要功能:

初始化硬件、网络、持久化存储。

设定实时线程优先级,保证周期性调度。

主循环中读取输入缓冲区,执行PLC逻辑,写输出缓冲区。

处理EtherCAT协议周期调用(可选)。

记录周期时间和延迟,保证实时性能。

关键函数和变量:

cppint main(int argc,char **argv)

{

// 初始化及日志打印

// 创建交互线程

// 初始化配置和硬件

// 初始化持久化存储

// 初始化Snap7协议

// 设置实时优先级和内存锁定

// 主循环:

// - 读取输入

// - 执行PLC逻辑

// - 写输出

// - 计算周期时间和延迟

// 关闭资源,退出

}

2. utils.cpp(工具函数)

提供时间控制、日志管理及特殊功能。

重要函数:

sleep_until:基于绝对时间的高精度睡眠。

timespec_diff:计算两个时间点的差值。

log:线程安全日志打印和缓冲。

disableOutputs:关闭所有输出。

handleSpecialFunctions:处理特殊寄存器如时间戳和周期计数。

代码示例:

cppvoid sleep_until(struct timespec *ts, long long delay)

{

ts->tv_sec += delay / 1000000000;

ts->tv_nsec += delay % 1000000000;

if(ts->tv_nsec >= 1000000000)

{

ts->tv_nsec -= 1000000000;

ts->tv_sec++;

}

clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, ts, NULL);

}

3. webserver.py(Web服务器)

基于Flask框架,提供用户登录、程序上传、状态查看等功能。使用flask_login管理用户会话。

4. openplc.py(后台管理)

实现对OpenPLC运行时控制台的非阻塞读取,管理后台任务。

依赖关系分析

C++运行时依赖POSIX线程和Linux系统调用,确保实时性。

Python Web服务器依赖Flask及相关库(Flask-Login、pyserial、pymodbus)。

硬件抽象层通过回调函数解耦硬件差异。

Dockerfile支持容器化部署,简化环境配置。

性能考虑

采用实时线程优先级和内存锁定,减少调度延迟。

主循环精确控制周期时间,保证PLC逻辑稳定执行。

日志使用循环缓冲区防止内存溢出。

支持EtherCAT等高性能工业协议。

故障排除指南

安装失败请检查依赖包是否满足,使用custom选项跳过自动安装。

Docker运行需确保宿主机Docker环境正常。

实时优先级设置失败会打印警告,但程序仍可运行,可能影响性能。

确认硬件设备连接正确,串口权限足够。

总结

OpenPLC_v3是一个功能丰富且开放的工业控制平台,支持多种硬件和协议。通过本指南,新用户可以快速搭建环境,理解核心架构,并顺利完成首次运行。

附录

安装示例命令

bashgit clone https://github.com/thiagoralves/OpenPLC_v3.git

cd OpenPLC_v3

./install.sh linux

Docker运行示例

bashdocker build -t openplc:v3 .

docker run -it --rm --privileged -p 8080:8080 openplc:v3

参考链接

README.md

install.sh

Dockerfile

webserver/core/main.cpp

webserver/core/utils.cpp

埃尔法为什么这么贵?丰田埃尔法优缺点点评
北京前海股骨头医院
Copyright © 2022 2018世界杯时间_世界杯百大球星 - gonhee.com All Rights Reserved.