Unity開(kāi)發(fā)APP與西門(mén)子SIMATIC系列PLC連接 第三章

魔晶自動(dòng)化機(jī)電工程社團(tuán)原創(chuàng)技術(shù)資料
專(zhuān)欄分類(lèi)
工業(yè),自動(dòng)化,電器,軟件開(kāi)發(fā),C#?
各位們好,我是魔晶自動(dòng)化機(jī)電工程社團(tuán)的團(tuán)長(zhǎng) 萬(wàn)影 星夢(mèng)

這次咕咕咕的有億點(diǎn)點(diǎn)久了,我承認(rèn)我這次更新的速度非常的慢,很抱歉,我來(lái)晚了。
那么直接步入正題
這章是這個(gè)文集的最后一章

あ 正文

あ - 本章標(biāo)題
利用Unity的預(yù)制件功能實(shí)現(xiàn)批量數(shù)據(jù)讀取監(jiān)視

あ - 內(nèi)容
01>前文
如下圖所示,這個(gè)TIA Protal工程中有本期預(yù)制的數(shù)據(jù)塊

和一個(gè)預(yù)制的Unity工程(其中的軟件名稱(chēng)為MJ C R,開(kāi)發(fā)到后期可能會(huì)更名)

02>主要部分
如下圖所示,我們這一章關(guān)鍵是講預(yù)制件的制作

首先在Unity的項(xiàng)目下創(chuàng)建一個(gè)文件夾
如下圖,這個(gè)名為A3的文件夾作為預(yù)制件的放置文件夾

如果想讓預(yù)制件適配場(chǎng)景,就需要在場(chǎng)景下創(chuàng)建
圖中是已經(jīng)創(chuàng)建好了的游戲?qū)ο蟛⒓僭O(shè)它已經(jīng)加了一些控件和必要的代碼,但它現(xiàn)在還不是預(yù)制件,我們需要將它制成預(yù)制件,只需在層級(jí)拖動(dòng)游戲?qū)ο蟮巾?xiàng)目的文件夾即可
其實(shí)這種批量讀取是靠Unity中制作好的預(yù)制件不斷復(fù)制克隆而來(lái)的,代碼基本沒(méi)啥難度,這是目前我整出來(lái)最省事的方法

這是Unity項(xiàng)目里面其中一個(gè)預(yù)制件的代碼,功能是讀取變量并且?guī)挝?寫(xiě)的時(shí)候可以參考一下這個(gè)代碼):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using S7.Net;
public class Console03 : MonoBehaviour
{
public enum 數(shù)據(jù)類(lèi)型表
{
Bool,
Int,
DInt,
Word,
Dword,
Real
};
public 數(shù)據(jù)類(lèi)型表 數(shù)據(jù)類(lèi)型;
public string 單位;
public string 數(shù)據(jù)地址;
public string 變量名稱(chēng);
public Plc PLC;
public Text T0;
public Text T1;
void Update()
{
PLC = GameObject.Find("Canvas").gameObject.GetComponent<PLCControl>().EPLC;
T0.text = 變量名稱(chēng);
if (PLC.IsConnected == true)
{
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.Bool)
{
bool A1 = (bool)PLC.Read(數(shù)據(jù)地址);
T1.text = A1.ToString();
}
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.Int)
{
int A1 = (ushort)PLC.Read(數(shù)據(jù)地址);
T1.text = A1.ToString() + 單位;
}
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.DInt)
{
var A1 = (uint)PLC.Read(數(shù)據(jù)地址);
T1.text = A1.ToString() + 單位;
}
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.Word)
{
var A1 = (ushort)PLC.Read(數(shù)據(jù)地址);
T1.text = A1.ToString() + 單位;
}
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.Dword)
{
var A1 = (uint)PLC.Read(數(shù)據(jù)地址);
T1.text = A1.ToString() + 單位;
}
if (數(shù)據(jù)類(lèi)型 == 數(shù)據(jù)類(lèi)型表.Real)
{
var A1 = ((uint)PLC.Read(數(shù)據(jù)地址)).ConvertToFloat();
T1.text = A1.ToString() + 單位;
}
}
}
}


結(jié)果如下

03>演示
將預(yù)制件拖入場(chǎng)景后賦予相關(guān)的代碼變量值
這是一個(gè)帶單位數(shù)據(jù)監(jiān)視的預(yù)制件,它已經(jīng)放置在場(chǎng)景中并且代碼已經(jīng)賦值

數(shù)據(jù)類(lèi)型是Int,指向的數(shù)據(jù)地址是DB1.DBW4.0 <數(shù)據(jù)塊:DB1 地址:4.0 地址類(lèi)型:DBW>
地址對(duì)應(yīng)的TIA Protal項(xiàng)目中的數(shù)據(jù)塊數(shù)據(jù)

接下來(lái)啟動(dòng)TIA Protal的PLC仿真并啟動(dòng)NET TO PLCSim,設(shè)置參照第二章
然后啟動(dòng)unity的項(xiàng)目并連接PLC:
Unity預(yù)覽

實(shí)際運(yùn)行


到此,PLC的測(cè)試連接和數(shù)據(jù)的讀寫(xiě)就完成了

后記
????????工業(yè)上位機(jī)控制系統(tǒng)有很多的實(shí)現(xiàn)方式,例如Winform項(xiàng)目。本文集只是個(gè)關(guān)于S7.Net這款開(kāi)源庫(kù)的入門(mén)方式。在這其中,Unity也只是一個(gè)為了將工業(yè)HMI功能移植到手機(jī)運(yùn)行的一種方式。
????????Unity這款3D引擎理論上適用于很多行業(yè),例如游戲、人工智能、3D場(chǎng)景模擬,目前在游戲行業(yè)使用較多,網(wǎng)上關(guān)于這款引擎的教程也很多。這里不多贅述,感興趣的可以去自主學(xué)習(xí)
????????本文集如有任何技術(shù)上的問(wèn)題,歡迎廣大看官指出,本社團(tuán)會(huì)核實(shí)后進(jìn)行修改

本文集到此結(jié)束
在此致謝來(lái)自五湖四海的看官

Thank You For Watching
ありがとうございます

魔晶自動(dòng)化機(jī)電工程社團(tuán)
萬(wàn)影 星夢(mèng)
2021~2022

最后,感謝各位能觀看我的專(zhuān)欄,你們的支持是UP主最大的動(dòng)力

End??
2023年8月8日第一次修改