75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
using Aitex.Core.RT.Log;
|
|
using MECF.Framework.Common.Communications;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MachineVision.HikVision
|
|
{
|
|
public class HikMessage: MessageBase
|
|
{
|
|
public string RawMessage { get; set; } = "";
|
|
|
|
public double[] paras;
|
|
public bool Result { get; set; } = false;
|
|
}
|
|
public class HikMVConnection : TCPPortConnectionBase
|
|
{
|
|
public HikMVConnection(string address, string newline = "\r", bool isAsciiMode = true) : base(address, newline, isAsciiMode)
|
|
{
|
|
|
|
}
|
|
|
|
public override bool SendMessage(string message)
|
|
{
|
|
return base.SendMessage(message);
|
|
}
|
|
|
|
protected override MessageBase ParseResponse(string rawText)
|
|
{
|
|
HikMessage msg = new HikMessage();
|
|
msg.RawMessage = rawText;
|
|
|
|
if (msg.RawMessage.Length == 0)
|
|
{
|
|
LOG.Error($"empty response");
|
|
msg.IsFormatError = true;
|
|
return msg;
|
|
}
|
|
else if (msg.RawMessage.StartsWith("OK")&& msg.RawMessage.Contains(':'))
|
|
{
|
|
try
|
|
{
|
|
var m = msg.RawMessage.Split(':');
|
|
var values = m[1].Split(',');
|
|
msg.paras = new double[values.Length];
|
|
for (int i = 0; i < values.Length; i++)
|
|
{
|
|
msg.paras[i]= Convert.ToDouble(values[i]);
|
|
}
|
|
msg.Result = true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
LOG.Error($"Convert Response Failed From Camera{Address}({msg.RawMessage})");
|
|
msg.RawMessage = $"Convert Response Failed From Camera{Address}({msg.RawMessage})";
|
|
}
|
|
|
|
}
|
|
else if (msg.RawMessage.StartsWith("NG"))
|
|
{
|
|
LOG.Error($"NG Response From Camera{Address}");
|
|
}
|
|
else
|
|
{
|
|
LOG.Error($"Unknown Response From Camera{Address}({msg.RawMessage})");
|
|
msg.RawMessage = $"Unknown Response From Camera{Address}({msg.RawMessage})";
|
|
}
|
|
|
|
msg.IsResponse = true;
|
|
msg.IsAck = true;
|
|
|
|
return msg;
|
|
}
|
|
}
|
|
}
|