受 RTSys:自主自研、简单易用的运动控制集成开发平台(上) 这篇文章的启发,决定制作一个简易的仿真软件。

一、仿真软件需求
仿真软件主要有四个功能:
1、支持HMI组态界面,可以选择NC文件,支持手动、自动,回零、轨迹监控等。
2、支持三维动画显示和交互,可以模拟真实数控机床,对面板进行操作。
3、支持数据采集和绘制,显示加速度、速度、路径等曲线。
4、支持硬件仿真,提供控制器输入开关状态切换及输出状态监控。
二、开发方案设计
1、首先考虑编程语言和图形界面框架
工控软件常见的开发方式有 WPF(C#)、QT(C++)、PyQt(python),由于此前做过上位机软件开发,最熟悉的是 Winform 和 WPF。另外是考虑到后期要制作数字孪生的功能,之前使用过 WPF 制作 3D可视化软件,也使用过 Unity 制作数字孪生。如果是使用 C++,可以使用虚幻引擎来制作。
2、其次考虑性能与跨平台
软件需求是实现数控系统过程数据的可视化,并不要求对加工数据的精确且实时显示,允许有一定的滞后,因此对实时性和平台的需求不是很大。
3、另外考虑混合编程
由于运动控制部分采用 C 和 C++ 混合编程,如果使用 WPF 和 QT 开发便会简单一些。同时要考虑两个进程之间的通信方式,可能会采用共享内存或消息队列的方式。
4、最后考虑我的心情 👻
相较于常规的工控软件,网页端界面的美观和便捷程度要远远超出前者,因此更倾向于采用 JavaScipt 和 vue 来开发。一是页面开发的样式十分好看,二是 threejs 可以实现 3D 模型交互效果,三是有开发经验不用花时间学习。
开发方案采用 Vue 制作交互界面,使用 threejs 3D 库实现数控加工仿真,通过 websocket 和 zmq 消息队列实实时运控系统和界面的数据收发。

三、仿真软件界面





四、联合调试
完成可视化界面的开发后,来尝试一下仿真软件和运控系统之间的联调效果吧。
首先开启通信,启动运动控制软件和仿真软件,实现两者的数据交互。在仿真软件上点击开始自动加工,通过中转站发送到运控系统,运控将运动的过程数据回传到仿真软件,并通过可视化界面动态展示。
插补路径
sin型速度曲线
仿真软件的效果还是很不错的,目前仍有很多功能还需完善。第一步的工作还是很满意的,接下来打算制作一个桌面级的"数控机床",我希望是一个非常小巧的迷你机床🤖~