Unity开发日常记录_6_工业仿真项目 使用S7.Net 和 博图TIA Portal V16 和 S7-PLCSIM Advanced V3.0 和 Robot Studio 进行工业仿真:
本文中开发的几个项目体量比较小,也没有做很多优化,单纯是记录整个项目遇到的问题 和 对应的解决方案,以及注意事项,为大家做工业仿真项目提供一个思路,有更好的方案和优化欢迎讨论,对于说的不对的地方也欢迎指正,共同学习。
技术路线
1.博图TIA Portal V16 与 Unity通讯,
S7-1200可以选择S7-PLCSIM V16 进行数据中转
S7-1500可以选择S7-PLCSIM Advanced V3.0进行数据中转
实控虚(真实机械台数据 控制 虚拟仿真台):
可以单独用C# 写个 负责PLC和ABB数据处理的服务器 + Unity 应用 组合实现
服务器 + Unity :真实机械台与服务器用网线通信,服务器与Unity之间可以使用 TCP/UDP/Http 通讯
虚控虚(PLC程序数据 控制 虚拟仿真台):
可以单独用QT 写个 负责ABB数据处理的服务器 + Unity 应用 组合实现,也可以集成于Unity应用来实现所有功能。
QT+Unity:ABB与QT服务器数据通过ABB的DLL调用, QT服务器与Unity 通信使用Http方式 ,PLC与Unity 不需要中转 直接使用S7.net 直接连接
为什么无论哪种方案都需要单独的一个服务器而不能整合成一个Unity应用?因为与ABB通信的主要DLL之一的System.Diagnostics.EventLog.dll可能依赖于Windows事件日志系统,这在Unity的跨平台环境中可能无法正确运行。其实集成于一个Unity应用中也有曲线方案,就是将单独写的服务器放在工程项目中,然后在Unity中通过Process.Start(ProcessStartInfo)
启动一个外部服务器新进程,看起来就像是集成一体了。或者如果可能,可以尝试将相关功能从这些DLL中提取并编译为Unity兼容的DLL。
总结一下
在Unity中进行PLC和ABB通信 一种可行的方案是 使用S7.Net + ABB官方的DLL
S7.Net
可以在Unity中作为插件被调用
ABB的DLL
需要写成单独的服务器 然后跟Unity进行通信
注意事项
1.S7-1200可以选择S7-PLCSIM V16 进行数据中转,但是同时 进行 读写操作的时候 数据通讯延迟大
2.丝滑的方案就是采用S7-1500选择S7-PLCSIM Advanced V3.0进行数据中转,但是限制在与Advanced 不支持S7-1200
3.Unity实现物理效果 有很多方案Articulation Body 是一种 ,需要注意一下支持的Unity的版本
4.注意一下PLC 和 ABB数据 通信的频率,非常要注重的地方在于 读写数据时候什么时候要用异步
,否则会造成严重的通讯卡顿延迟
5.Unity拿到了PLC或者ABB的数据 那么在3D物体身上的表现上 要注意 物体动画的实现,要知道实际的机械台很多的PLC信号间隔特别小约等于0,等通过网络传输到虚拟的台子上,会有零点几秒的延迟,这些延迟会造成很多问题,所以这个地方需要PLC 程序 ABB程序 Unity程序 三方协同。要么就解决通讯延迟的问题。
资源
S7.Net插件 和 ABB 的 DLL 可以进我主页搜索下载
后话
先写这么多,后期考虑将做的这些Unity工业仿真项目 慢慢形成的简易框架整理一下 然后发出来,其实也没有什么框架,就是将各种文件读取功能、各种监听、多个PLC管理和状态回调等 这些功能提出来方便后面新项目复用罢了。
标签:仿真,ABB,V3.0,S7,DLL,Unity,PLC,服务器 From: https://blog.csdn.net/qq_42692089/article/details/144214691