using System;
|
using System.Net;
|
|
namespace HalconTools
|
{
|
public class LkSensorWrapper
|
{
|
public SerialportWrapper comPort;
|
public const string READ_BOTH_HEAD_CMD = "M0";
|
public const string READ_HEAD_A_CMD = "M1";
|
public const string READ_HEAD_B_CMD = "M2";
|
public const string CHANGE_PROGRAM_CMD = "PW,";
|
public const string START_SYNCSTORING_CMD = "AS";
|
public const string STOP_SYNCSTORING_CMD = "AP";
|
public const string CLEAR_STORING_CMD = "AQ";
|
public const string READ_STORING_CMD = "AO";
|
public const int ONE_HEAD_RESULT_LEN = 12;
|
public const int TWO_HEAD_RESULT_LEN = 21;
|
public const int FIVE_RESULT_LEN = 48;
|
public const int EIGHT_RESULT_LEN = 75;
|
public const double TIMEOUT_SPAN = 3E7;
|
|
public LkSensorWrapper()
|
{
|
comPort = new SerialportWrapper();
|
comPort.Open(0, 9600, false);
|
}
|
|
public LkSensorWrapper(int index)
|
{
|
comPort = new SerialportWrapper();
|
comPort.Open(index, 9600, false);
|
}
|
|
public LkSensorWrapper(string comName)
|
{
|
comPort = new SerialportWrapper();
|
switch (comName)
|
{
|
case "COM1":
|
comPort.Open(0, 9600, false);
|
break;
|
|
case "COM2":
|
comPort.Open(1, 9600, false);
|
break;
|
|
case "COM3":
|
comPort.Open(2, 9600, false);
|
break;
|
|
case "COM4":
|
comPort.Open(3, 9600, false);
|
break;
|
|
case "COM5":
|
comPort.Open(4, 9600, false);
|
break;
|
}
|
}
|
|
public void ComReadHead(int index, ref float value)
|
{
|
String measureCommand = "";
|
|
if (1 == index)
|
{
|
measureCommand = READ_HEAD_A_CMD;
|
}
|
else if (2 == index)
|
{
|
measureCommand = READ_HEAD_B_CMD;
|
}
|
|
comPort.Send(measureCommand + "\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < ONE_HEAD_RESULT_LEN)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string[] LkOutput = comPort.builder.ToString().Split(',');
|
comPort.Clear();
|
|
if (measureCommand.Equals(LkOutput[0]))
|
{
|
if (LkOutput[1].Contains("FFFF"))
|
{
|
value = float.NegativeInfinity;
|
}
|
else
|
{
|
value = Convert.ToSingle(LkOutput[1]);
|
}
|
}
|
else
|
{
|
value = float.PositiveInfinity;
|
}
|
}
|
|
public void ComReadHeads(ref float valueA, ref float valueB)
|
{
|
string measureCommand = READ_BOTH_HEAD_CMD;
|
|
comPort.Send(measureCommand + "\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < TWO_HEAD_RESULT_LEN)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string[] LkOutput = comPort.builder.ToString().Trim().Split(',');
|
|
if (measureCommand.Equals(LkOutput[0]))
|
{
|
if (LkOutput[1].Contains("FFFF"))
|
{
|
valueA = float.NegativeInfinity;
|
}
|
else
|
{
|
valueA = Convert.ToSingle(LkOutput[1]);
|
}
|
if (LkOutput[2].Contains("FFFF"))
|
{
|
valueB = float.NegativeInfinity;
|
}
|
else
|
{
|
valueB = Convert.ToSingle(LkOutput[2]);
|
}
|
|
}
|
else
|
{
|
valueA = float.PositiveInfinity;
|
valueB = float.PositiveInfinity;
|
}
|
}
|
|
public void ChoosePrgram(int progNo)
|
{
|
comPort.Send(CHANGE_PROGRAM_CMD + progNo.ToString() + "\r");
|
comPort.Clear();
|
}
|
|
public void StartSyncStoring()
|
{
|
comPort.Send(START_SYNCSTORING_CMD + "\r");
|
comPort.Clear();
|
}
|
|
public void StopSyncStoring()
|
{
|
comPort.Send(STOP_SYNCSTORING_CMD + "\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < 2)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string[] LkOutput = comPort.builder.ToString().Trim().Split(',');
|
|
if (LkOutput[0].Contains(STOP_SYNCSTORING_CMD))
|
{
|
return;
|
}
|
else
|
{
|
return;
|
}
|
}
|
|
public void ClearStoring()
|
{
|
comPort.Send(CLEAR_STORING_CMD + "\r");
|
comPort.Clear();
|
}
|
|
public void ReadStoring(ref float valueA, ref float valueB)
|
{
|
string measureCommand = READ_STORING_CMD;
|
|
comPort.Send(measureCommand + ",01\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < EIGHT_RESULT_LEN)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string[] LkOutput = comPort.builder.ToString().Trim().Split(',');
|
|
if (measureCommand.Equals(LkOutput[0]))
|
{
|
if (LkOutput.Length < 2)
|
return;
|
|
if (LkOutput[1].Contains("FFFF"))
|
{
|
valueA = float.NegativeInfinity;
|
}
|
else
|
{
|
valueA = Convert.ToSingle(LkOutput[1]);
|
}
|
if (LkOutput[2].Contains("FFFF"))
|
{
|
valueB = float.NegativeInfinity;
|
}
|
else
|
{
|
valueB = Convert.ToSingle(LkOutput[2]);
|
}
|
|
}
|
else
|
{
|
valueA = float.PositiveInfinity;
|
valueB = float.PositiveInfinity;
|
}
|
}
|
}
|
|
public class HlSensorWrapper
|
{
|
public SerialportWrapper comPort;
|
public const string READ_BOTH_HEAD_CMD = "%EE#RMA5**";
|
public const string READ_HEAD_A_CMD = "%EE#RMD3**";
|
public const string READ_HEAD_B_CMD = "%EE#RMD4**";
|
public const string READ_ONE_HEAD_REPLY = "%EE$RMD";
|
public const string READ_TWO_HEADS_REPLY = "%EE$RMA";
|
public const int ONE_HEAD_RESULT_LEN = 21;
|
public const int TWO_HEAD_RESULT_LEN = 32;
|
public const int HEAD_A_RESULT_STARTINDEX = 7;
|
public const int HEAD_B_RESULT_STARTINDEX = 18;
|
public const int HEAD_RESULT_LENGTH = 11;
|
public const double TIMEOUT_SPAN = 3E7;
|
|
public HlSensorWrapper()
|
{
|
comPort = new SerialportWrapper();
|
comPort.Open(0, 115200, false);
|
}
|
|
public void ComReadHead(int index, ref float value)
|
{
|
String measureCommand = "";
|
|
if (1 == index)
|
{
|
measureCommand = READ_HEAD_A_CMD;
|
}
|
else if (2 == index)
|
{
|
measureCommand = READ_HEAD_B_CMD;
|
}
|
|
comPort.Send(measureCommand + "\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < ONE_HEAD_RESULT_LEN)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string HlOutput = comPort.builder.ToString().Trim();
|
comPort.Clear();
|
|
if (HlOutput.Contains(READ_ONE_HEAD_REPLY))
|
{
|
if (HlOutput.Contains("FFFF"))
|
{
|
value = float.NegativeInfinity;
|
}
|
else
|
{
|
value = Convert.ToSingle(HlOutput.Substring(HEAD_A_RESULT_STARTINDEX, HEAD_RESULT_LENGTH));
|
}
|
}
|
else
|
{
|
value = float.PositiveInfinity;
|
}
|
}
|
|
public void ComReadHeads(ref float valueA, ref float valueB)
|
{
|
string measureCommand = READ_BOTH_HEAD_CMD;
|
|
comPort.Send(measureCommand + "\r");
|
comPort.Clear();
|
|
DateTime startTime = DateTime.Now;
|
while (comPort.builder.Length < TWO_HEAD_RESULT_LEN)
|
{
|
DateTime currentTime = DateTime.Now;
|
if (currentTime.Ticks - startTime.Ticks > Convert.ToInt32(TIMEOUT_SPAN))
|
{
|
break;
|
}
|
}
|
|
string[] HlOutput = comPort.builder.ToString().Trim().Split(',');
|
|
if (HlOutput[0].Contains(READ_TWO_HEADS_REPLY))
|
{
|
valueA = Convert.ToSingle(HlOutput[0].Substring(HEAD_A_RESULT_STARTINDEX, HEAD_RESULT_LENGTH));
|
valueB = Convert.ToSingle(HlOutput[0].Substring(HEAD_B_RESULT_STARTINDEX, HEAD_RESULT_LENGTH));
|
}
|
else
|
{
|
valueA = float.PositiveInfinity;
|
valueB = float.PositiveInfinity;
|
}
|
}
|
}
|
|
public class ZwSensorWrapper
|
{
|
public SocketTools st;
|
public IPAddress remoteIpAddr;
|
public int remotePort;
|
public const string READ_HEAD_A_CMD = "M";
|
public const string READ_ERROR_REPLY = "ER";
|
public const string READ_INVALID_REPLY = "----";
|
public const int ONE_HEAD_RESULT_LEN = 21;
|
public const int TWO_HEAD_RESULT_LEN = 32;
|
public const int HEAD_A_RESULT_STARTINDEX = 7;
|
public const int HEAD_B_RESULT_STARTINDEX = 18;
|
public const int HEAD_RESULT_LENGTH = 11;
|
public const double TIMEOUT_SPAN = 3E7;
|
|
public ZwSensorWrapper(string remoteIpAddr, int remotePort)
|
{
|
this.remoteIpAddr = IPAddress.Parse(remoteIpAddr);
|
this.remotePort = remotePort;
|
|
st = new SocketTools(9600, this.remotePort, this.remoteIpAddr, new System.Net.IPAddress(0));
|
}
|
|
public void ComReadHead(int index, ref float value)
|
{
|
string str = "";
|
|
str = READ_HEAD_A_CMD + "\r";
|
|
st.SendAndReceiveMessage(remoteIpAddr, 9600, ref str);
|
|
if (!str.Contains(READ_ERROR_REPLY))
|
{
|
if (str.Contains(READ_INVALID_REPLY))
|
{
|
value = float.NegativeInfinity;
|
}
|
else
|
{
|
value = Convert.ToSingle(str) / 1000000;
|
}
|
}
|
else
|
{
|
value = float.PositiveInfinity;
|
}
|
}
|
|
public void ComReadHeads(ref float valueA, ref float valueB)
|
{
|
ComReadHead(0, ref valueA);
|
valueB = valueA;
|
}
|
|
}
|
}
|