『7x24小时有问必答』

前言

在工业自动化现场摸爬滚打久了,多少都有过这样的体会:PLC那边稳定可靠,但 写个上位机界面总觉得束手束脚;用C#、Python做上位机虽然灵活,但要把通讯、变量管理、界面交互这些零碎东西都从头搭一遍,光是前期准备工作就够折腾人的。
项目它不是一个简单的通讯库,而是一整套带"PLC风格"的上位机开发框架——你可以像配置PLC那样去配置硬件、变量和工艺流程,但又保留了上位机在界面和数据处理上的灵活性。这篇文章就聊聊这个项目是怎么设计的,以及实际用起来是什么感觉。

项目介绍

一个基于.NET Framework和WPF的上位机开发平台,它最核心的设计思路,是把PLC工程化的配置思维搬到了上位机开发里。
什么意思呢?用过PLC的人都知道,编程时先要配置硬件组态、定义变量表、再写逻辑程序——这套流程是固定的、模块化的。PLCSharp把这种体验复刻到了上位机上:你面对的不是一个空白的代码编辑器,而是一个可以配置硬件、拖拽控件、搭建流程的工作环境。项目框架已经帮你把通讯、界面、数据管理这些底层脏活累活都封装好了,你需要做的只是按需配置。

项目功能

项目功能围绕工业现场的几个核心场景来组织,主要的模块和对应的能力如下:
功能模块
具体能力
硬件配置
支持西门子、三菱等主流PLC、运动控制器、工业相机、机器人的快速接入,通过配置IP和端口完成设备互联
运动控制
内置点位运动、连续轨迹、G代码解析等算法,满足数控和机器人协作场景
机器视觉
提供相机标定、图像采集、缺陷检测工具包,支持OpenCV算法调用
通讯协议
兼容Modbus、TCP/IP、OPC UA等工业协议,支持自定义协议扩展
人机界面
提供状态指示灯、实时表格、动态图表等可视化组件,支持数据绑定和事件触发
工作流引擎
通过流程图式编排逻辑节点(条件判断、循环、数据运算),搭建自动化流程
配方与全局变量
统一管理数值、字符串、图像等多种数据类型,支持跨模块共享

项目特点

一是"无代码"的流程编排方式。  大多数控制逻辑是通过拖拽节点和连线完成的,不需要一行行敲代码。比如一个简单的分拣流程,就是"相机拍照→图像处理→判断产品类型→气缸动作"这样一串节点连起来就行。
二是全局变量驱动。  所有模块共享同一套变量库,运动控制模块的"当前位置"可以直接绑定到主界面的图表上,数据是实时联动的,不用自己写消息传递逻辑。
三是保留脚本扩展能力。  如果流程图满足不了需求,可以在关键节点嵌入C脚本,兼顾了标准化和灵活性。

项目技术

从代码结构上看,这个项目采用了几层清晰的分层设计。
PLCSharp/

├── Core/                                       # 基础设施层

│    ├── Prism/                                # Prism框架相关(依赖注入、导航、模块管理)

│    ├── Common/                              # 通用数据模型(实体类、枚举、DTO)

│    ├── Tools/                                # 工具类(日志、加密、转换器、扩展方法)

│    ├── UserControls/                     # 可复用控件(指示灯、按钮、仪表盘等)

│    └── Resources/                          # 图标字体及全局样式资源

├── Models/                                    # 全局数据模型(跨模块共享的数据结构)

└── VVMs/                                       # 业务模块层(View + ViewModel 成对出现)

      ├── Authority/                          # 用户认证模块(登录、权限校验、会话管理)

      ├── MainWindow/                        # 主窗口容器(标题栏、菜单栏、状态栏布局)

      ├── Homepage/                           # 主页面(概览仪表盘、关键数据监控)

      ├── Connects/                           # 通讯模块(PLC、串口、TCP/IP连接管理)

      ├── MotionController/               # 运动控制模块(点位运动、轨迹插补、G代码)

      ├── Vision/                              # 机器视觉模块(相机标定、图像采集、缺陷检测)

      ├── Workflows/                          # 工作流引擎(流程图式逻辑编排、节点执行)

      ├── ModeState/                          # 模式状态模块(手动/自动/调试模式切换)

      ├── GlobalVariables/                 # 全局变量管理(变量定义、绑定、实时刷新)

      ├── Recipe/                              # 配方模块(参数配方、工艺配方管理)

      └── Robots/                              # 机器人模块(机器人通讯、指令下发、状态监控)

基础设施层(Core)

Core层放的是通用的基础设施:Prism框架相关的封装、通用数据模型、工具类和用户控件。Prism在这里主要承担了MVVM模式下的依赖注入、导航和模块化管理工作,让各个业务模块可以独立开发和加载。

业务模块层(VVMs)

VVMs文件夹里是按业务功能拆分的独立模块:用户认证、主窗口容器、通讯管理、运动控制、视觉处理、工作流引擎、模式状态、全局变量、配方管理、机器人对接等。每个模块都是View和ViewModel成对出现,互不干扰。

主窗口设计

看下MainWindow的XAML代码,有个细节值得提一下。窗口去掉了默认标题栏,用自定义的标题栏替代,同时支持拖拽和双击最大化。右上角的最小化、最大化、关闭按钮分别绑定了对应事件,关闭按钮还通过Command关联了ViewModel里的Exit逻辑:
<Button  Grid.Column="3"  Command="{Binding Exit}"  ToolTip="退出">

       <TextBlock  Text="&xeca0;"  FontFamily="{StaticResource iconfont}"  Foreground="LightGray"  />

<!--Button-->

左侧菜单栏通过ListBox绑定Navigate.NavigateListShow,选中的菜单项会通过Prism的区域管理加载到右侧的ContentRegionCore中——这种区域导航是Prism处理页面切换的常用套路。
右下角状态栏展示了当前登录用户、权限等级、CPU占用率和内存使用情况,信息虽简单,但都是现场调试时高频关注的数据。

硬件抽象层(HAL)

项目在底层实现了一个硬件抽象层,把不同厂家设备的接口统一成标准模型。上层开发时只需要调用统一的读写接口,不需要关心对方到底是西门子还是三菱,通讯细节全由底层处理。

项目效果

对于熟悉PLC但不太擅长C的工程师来说,上手门槛明显低了——不需要从头学WPF和MVVM那一整套东西,直接在框架里配置就行。
对于有一定C基础的人来说,最大的价值是省去了重复造轮子的时间。通讯模块、变量管理、界面框架这些基础工作不用自己写了,拿到项目直接在上面搭业务逻辑就行。

项目源码

建议先从MainWindow和Navigate模块入手,把整体框架走通,再根据需要深入到具体业务模块里。

总结

PLCSharp这套框架,本质上是在解决一个很实际的问题:上位机开发能不能像PLC编程那样,配置多于编码、模块化大于自由发挥?
从项目设计和实现来看,它确实把这个思路落地了——硬件抽象层屏蔽了设备差异,工作流引擎降低了编程门槛,全局变量机制简化了模块间通信。当然,它也不是万能的,复杂的业务逻辑还是需要写脚本支撑,但对于大多数中小型自动化项目来说,这套框架能省下不少前期搭建的时间。

关键词

上位机开发WPF、Prism框架、工业自动化、全局变量、工作流引擎、Modbus、OPC UA、硬件抽象层、MVVM低代码、流程图编程、运动控制、机器视觉
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码