如何使用西门子PLC控制unity中的物体旋转呢
unity初学者,这两天只学了个导入模型到unity里,但是目的是要用PLC控制模型旋转。网上搜到的教程都只有PLC和unity通信,而且程序我也看不太懂,我看有的还要用虚拟机,并且unity里的角度好像也要设置。希望有同时了解unity和PLC这两方面的可以指点一下,PLC是S71200,博图版本是V15,实体的仿真的都可以。
初步有两种方式。
1、用类库直接链接plc,虚拟真实都可以。
2、实体plc做socket通讯。
第一种方式:
譬如一个设备旋转,有编码器的话就在unity或者在plc做坐标转换,没有编码器的话用其他定位方式做坐标转换,就是把plc的位置,转换成unity里面的坐标,这个可以用公式。参考西门子SFC105,计算公式为OUT = [ ((FLOAT (IN) - K1)/(K2 - K1)) * (HI_LIM - LO_LIM)] + LO_LIM,可以运用这个公式写出unity所需要的坐标。
第二种方式:实体plc做socket通讯,局域网内用fc5/6(tsend/trecv)实现socket连接,unity建立socket连接可百度,通过tcp/ip实现数据的传送,后期坐标的转换也是同第一种方式相同。
得到了坐标,直接循环赋值即可。同时也可以得到报警等信息。
有博图和plc为什么还用虚拟机呢,你在c#引用一个S7.NET动态库,加上using S7.Net; 在所建立的名称类下面实例链接Plc PLC1 = new Plc(CpuType.S71200, "192.168.0.1", 0, 1);然后在unity的component的script方法名称下打开c#和unity链接PLC1 = new Plc(CpuType.S71200, InputIP.text, 0, 1); PLC1.Open();
c#的update会按照project setting的time循环读取。比如位置移动,你可以给一些数字量或模拟量以float通过plc给到c#,那么unity就会按照默认的0.02s实时读取并移动指定component。unity和plc的通讯就相当于是和c#的通讯,我的博文里面有,你可以借鉴一下。
其实说白了就是unity去读plc的点位,存在变量里,然后判断变量,控制旋转
plc通信你可以引用s7net.dll,这个在网上搜索一下,可以下载到,但是unity本身是否能支持就不知道了,很可能引用dll会报错,因为这个是基于framework 4.6的,unity很可能不支持这么高的版本,那你就需要用vs开发一个服务作为中间件来实现通信
或者你在plc上加一块modbus tcp协议的卡,然后用modbus协议去读plc,不过plc里要写程序实现点位映射
unity可以进行tcp或者是串口通讯啊,然后就是改变unity物体的z轴就是旋转了啊,你现在重点应该是看你的plc使用的是什么通讯协议,然后你就可以百度搜索unity怎么使用对应的通讯协议,就行了,代码用的都是c#,如果你不会c#的话,估计你应该弄不出来了
额,这题目太大了,不好回答。
我只能拆成2块来说
1.别管plc,先做u3d的。对于我们来说,plc是提供数据的和下发控制指令的。这块有没有其实不影响开发。这也是你上面提到有些人的资料使用了虚拟机。他使用虚拟机的目的只是当一个硬件模拟器,如果我们个人开发,不用模拟器,自己写个服务甚至直接在u3d里内置一个“plc数据模拟发送和接收的”模块让他自己不停给一个“接收”对接发送数据,不停的给一个发送队列发送数据(并打印到ui上,以便调试)这样也行
2.如果你UI都弄好了就差数据,那么对接plc数据。因为plc对接有很多方式。我谁便说说把,协议上有Modbus协议,S7Comm协议,http Restfull api协议。硬件连接上有tcp网口,串口,opc 代理,mqtt透传代理等很多种方式。所以我们不太好说你需要怎么弄
当然我个人建议是,新人入门直接上Ros系统做。对于Ros来说plc也只是一个Node节点,那个2部分有硬件也好,没硬件也罢都行。
有硬件直接用库当node节点连上(无所谓他用什么方式,在Ros里你用啥方式连接都是node,无非是桥接参数不一样)
没硬件就直接上虚拟节点模拟器(因为他内置通讯规则都是类似mq的topic消息,你只是对node订阅,发送消息。有硬件,没硬件,用啥传输都是在你的代码层面都是一样的)
这个问题的关键点是C#,unity的支撑语言是C#,所以研究的对象是如何用C#与S7-1200对接,西门子的资料上应该能找到,PLC支持的通讯也不少,modbus TCP,socket,http等方式都可以尝试,可以从这方面入手
和硬件进行通信来实现。采集plc输出的报文,和博图没关系。plc只提供了一个报文,你可以先不管plc,使用软件来代替plc.