×

WinForm 打造类 IDE 的运动控制上位机

独孤求败 独孤求败 发表于2026-03-12 22:18:20 浏览27 评论0

抢沙发发表评论

前言

工业自动化软件开发中,一个成熟、可扩展的上位机系统往往比硬件本身更考验工程能力。它不仅要稳定可靠,还要支持灵活配置、流程编辑、多页面管理以及良好的用户体验。

本文推荐一个基于 WinForm 开发的模块化运动控制框架。它并非简单的按钮+轴控面板,而是一个融合了事件驱动、依赖注入、可停靠窗口和流程编排能力的轻量级 IDE 式上位机平台。

项目介绍

项目是一套面向中小型自动化设备的上位机软件框架,目标是提供类似"简易版 PLC 编程环境"的操作体验。

可以在图形界面中切换自动运行、手动调试、产品管理、流程编辑等不同工作区,并通过统一的控制面板(启动、暂停、回零等)触发全局操作。

整个系统采用插件式架构,核心逻辑解耦,便于后续功能扩展或适配不同硬件平台。

项目功能

1、支持多页面切换

包括自动运行(FrmAuto)、手动控制(FrmManual)、产品管理、流程编辑、IO 调试、工位配置等十余个功能模块。

2、提供全局控制指令

如启动、暂停、继续、停止、回零、运行选中工具、执行完整流程等,所有操作通过事件总线广播。

3、流程编辑器支持可视化流程设计

可打开、新建、保存流程文件,并在可停靠窗口中编辑具体动作。

4、集成类 IDE 界面布局

包含工具箱、解决方案资源管理器、属性面板、调试输出、变量/参数窗口等,支持自定义布局并持久化保存。

5、窗口状态记忆

程序关闭时自动保存主窗体位置与尺寸,下次启动恢复原状。

6、安全退出机制

退出前弹出确认对话框,并有序发布退出事件,确保资源释放。

项目特点

事件驱动架构:通过 EventMgrLib 实现松耦合通信,各模块仅依赖事件,不直接调用彼此方法。

依赖注入管理:使用 UnityIoc 容器统一创建和管理页面实例,提升可测试性与扩展性。

可停靠窗口系统:基于 WeifenLuo.WinFormsUI.Docking 实现 VS 风格的多文档界面(MDI),支持拖拽、分组、浮动。

配置持久化:DockPanel 布局、主窗体位置等 UI 状态均自动保存至本地文件,提升用户体验。

模块化设计:每个功能页面独立封装,注册到页面管理器(PagesMgr)后即可按需加载,避免内存浪费。

项目技术

1、开发框架

C# + .NET Framework + WinForm,界面库采用 Sunny.UI 提升视觉效果。

2、核心架构

  • 事件总线(EventMgrLib)实现跨模块通信;

  • Unity 容器(UnityIoc)管理对象生命周期;

  • 页面管理器(PagesMgr)统一调度主区域内容切换。

3、界面布局

集成 DockPanel Suite(WeifenLuo 库),支持复杂窗口停靠与布局恢复。

4、配置存储

使用 Settings.Default 保存窗体尺寸位置,XML 文件保存 DockPanel 布局。

5、代码组织

按功能划分命名空间(如 AllPages.SysConfigPages.DockPages),结构清晰。

项目代码

private void IniUI()
{
    ShowDragStretch = true;
    if (Settings.Default.width > 0) Width = Settings.Default.width;
    if (Settings.Default.height > 0) Height = Settings.Default.height;
    if (Settings.Default.top >= 0) Top = Settings.Default.top;
    if (Settings.Default.left >= 0) Left = Settings.Default.left;
    //获取单例模式
    _pagesMgr = PagesMgr.Ins;
    //注册容器
    _pagesMgr.RegisterPanel(panMain);
    //注册选项卡切换页面
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<UIPage>("FrmAuto"));
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<UIPage>("FrmManual"));

    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmProductMgr>());
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmFlowEdit>());
    //注册按钮切换手动调试页面
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmStationDebug>());
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmIODebug>());

    //注册按钮切换系统配置页面
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmMotionConfig>());
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmIOConfig>());
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmStationConfig>());
    _pagesMgr.RegisterPageToPanel(panMain.Name, _ioc.Resolve<FrmDeviceConfig>());

    //显示自动运行页面
    _pagesMgr.ShowPage(panMain.Name, "FrmAuto");
}

private void tabRibbon_Selected(object sender, System.Windows.Forms.TabControlEventArgs e)
{
    if (e.TabPage.Tag == nullreturn;
    string pageName = e.TabPage.Tag.ToString();
    _pagesMgr.ShowPage(panMain.Name, pageName);
}

private void NaviButton_Click(object sender, EventArgs e)
{
    if (!(sender is UIHeaderButton button)) return;
    if (button.Tag != null)
    {
        _pagesMgr.ShowPage(panMain.Name, button.Tag?.ToString());
    }
}

private void FrmMain_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
{
    #region SaveUISet

    Settings.Default.width = Width;
    Settings.Default.height = Height;
    Settings.Default.top = Top;
    Settings.Default.left = Left;
    Settings.Default.Save();

    #endregion SaveUISet
}

项目效果

左侧是工具箱,右侧是属性与流程管理器,底部是调试输出与参数面板。点击顶部导航按钮或标签页,主区域无缝切换不同功能页面。在流程编辑器中,双击流程项可打开专属编辑窗口,所有操作通过事件联动。

整个系统响应流畅,布局灵活,即使关闭重启,也能还原上次的工作环境。这种"所见即所得"的体验,极大降低了非专业用户的使用门槛。

运动控制
图片
工具调试
图片
流程编辑
图片

图片
系统设置
图片
产品管理
图片

项目源码

项目采用标准 C# 工程结构,核心逻辑集中在 FrmMain 主窗体与 FrmFlowEdit 流程编辑器中。

所有页面通过 IoC 容器解析并注册,事件订阅/取消在页面加载/关闭时自动处理。

依赖库包括 Sunny.UI、DockPanel Suite、Unity 及自定义事件管理库,均为常见开源组件。

为了防止丢失,可以在评论区留言关键字流程编辑,即可获取完整源码地址。

图片

总结

项目展示了如何用传统 WinForm 技术开发一个现代化、可扩展的工业上位机。它没有盲目追求 WPF 或 Electron,而是在熟悉的技术栈上,通过良好的架构设计(事件驱动 + 依赖注入 + 可停靠窗口)实现了接近专业 IDE 的交互体验。

对于需要快速交付、又要求一定灵活性的自动化项目来说,这种"小而精"的框架思路值得借鉴。未来若加入脚本引擎、OPC UA 通信或 Web 远程监控,将进一步提升其工业适用性。


群贤毕至

访客