硬件逻辑处理:开启、读信号、写信号、关闭
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO.Ports;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Events;
using System.Text;
/// <summary>
/// 罐笼硬件联动控制
/// </summary>
public class CageSerial : MonoBehaviour
{
public SerialPort serialPortCom9;//串口通信 - COM9 -- 罐笼联动
[HideInInspector] public string Com9;//可读取开关值
bool com9Open;
BlockingCollection<byte[]> buffers9 = new BlockingCollection<byte[]>();//数列
public ErrorRecord errorRecord;
[HideInInspector]public int cageValue;
private async void Start()
{
SetCom9();
CageHoming();
//await Task.Run(() => Read());
await Task.Run(() => Send9());
}
/// <summary>
/// 给COM9写入命令
/// </summary>
async void Send9()
{
while (serialPortCom9.IsOpen)
{
var temp = buffers9.Take();
serialPortCom9.Write(temp, 0, temp.Length);//写入
Debug.Log("写入");
await Task.Delay(10);
}
}
/// <summary>
/// 开启con9 -- 罐笼联动
/// </summary>
public void SetCom9()
{
string sceneName = SceneManager.GetActiveScene().name.Substring(1, 1);
List<string> subject = new List<string> { "2", "4" };
if (!subject.Contains(sceneName)) return;
Com9 = SerialData.cageCom;
try
{
serialPortCom9 = new SerialPort(Com9, 115200, Parity.None, 8, StopBits.One);
serialPortCom9.Open();//开启串口7
com9Open = true;
}
catch (Exception ex)
{
HintAnomaly(ex.ToString());
Debug.LogError(ex);
serialPortCom9.Close();
serialPortCom9.Dispose();
}
}
/// <summary>
/// 提示与硬件连接异常
/// </summary>
public void HintAnomaly(string error)
{
errorRecord.Write(error);
}
/// <summary>
/// 罐笼上升
/// </summary>
public void CageUp()
{
byte[] data = new byte[] { 0x95, 0x00, 0x0D, 0x0A };
serialPortCom9.Write(data, 0, data.Length);
}
/// <summary>
/// 罐笼下降
/// </summary>
public void CageDown()
{
byte[] data = new byte[] { 0x95, 0x78, 0x0D, 0x0A };
serialPortCom9.Write(data, 0, data.Length);
}
/// <summary>
/// 罐笼到达中途
/// </summary>
public void CageArriveMidway()
{
byte[] data = new byte[] { 0x95, 0x3C, 0x0D, 0x0A };
serialPortCom9.Write(data, 0, data.Length);
}
private void OnDisable()
{
CloseCom();
}
/// <summary>
/// 罐笼归位
/// </summary>
async void CageHoming()
{
byte[] data = new byte[] { 0x97, 0x00, 0x0D, 0x0A };//校准位置
serialPortCom9.Write(data, 0, data.Length);
await Task.Delay(100);
byte[] data2 = new byte[] { 0x95, 0x78, 0x0D, 0x0A };//罐笼到达最低位(以右侧罐笼为准)
serialPortCom9.Write(data2, 0, data2.Length);
}
/// <summary>
/// 读参数
/// </summary>
async void Read()
{
try
{
while (serialPortCom9.IsOpen)
{
byte[] data = new byte[] { 0x96, 0x00, 0x0D, 0x0A };
serialPortCom9.Write(data, 0, data.Length);
await Task.Delay(500);
int length = serialPortCom9.BytesToRead;
if (length > 1)
{
byte[] receive = new byte[1];
serialPortCom9.Read(receive, 0, 1);
if (receive[0] == 0x96)
{
serialPortCom9.Read(receive, 0, 1);
Debug.Log($"罐笼{receive[0]}");
cageValue = receive[0];
Debug.Log(cageValue);
}
}
await Task.Delay(500);
}
}
catch (Exception ex)
{
Debug.LogError("com9:"+ex);
}
}
/// <summary>
/// 关闭com口
/// </summary>
public void CloseCom()
{
serialPortCom9.Close();
serialPortCom9.Dispose();
}
public void CloseCom(UnityAction unityAction)
{
try
{
if (serialPortCom9.IsOpen)
{
serialPortCom9.Close();
serialPortCom9.Dispose();
}
unityAction?.Invoke();
}
catch (System.Exception ex)
{
HintAnomaly(ex.ToString());
Debug.LogError(ex);
}
}
}
com获取外部配置
using GLHttpUtils;
using Lander;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 硬件数据
/// </summary>
public class SerialData : MonoBehaviour
{
public NetUrlData serialData;
public static string cageCom;//罐笼com口
private void Awake()
{
//GetDackstage();
GetJson();
}
/// <summary>
/// 后台获取
/// </summary>
public void GetDackstage()
{
HttpUtils.Instacne.GetSetting<NetUrlData>(Global.Instance.responseUserData.serial, Global.Instance.responseUserData.license, Global.Instance.enumEquip,
(b1, s2, arg3) => {
if (b1)
{
serialData = arg3;
cageCom = serialData.Config.com3;
Debug.Log(cageCom);
}
else
{
}
});
}
/// <summary>
/// 获取ComJson数据
/// </summary>
public void GetJson()
{
cageCom = LoadJson().com_9;
Debug.Log(cageCom);
}
public JsonDate LoadJson()
{
string path = Application.streamingAssetsPath + "/COM.json";
return JsonConvert.DeserializeObject<JsonDate>(FileUtils.ReadFile(path));
}
}
public class NetUrlData
{
public URLSettingData Config;
}
public class URLSettingData
{
public string com3;
}
public class JsonDate
{
public string com_9;
}
com口json配置表
{
"com_9": "COM9"
}