using System;
|
using System.Linq;
|
using System.Text;
|
using HH.WCS.Mobox3.RiDong.process;
|
|
namespace HH.WCS.Mobox3.RiDong.device;
|
|
internal class PlcHelper
|
{
|
internal static void Receive(string ip, string msg)
|
{
|
//处理设备信号
|
DeviceProcess.Analysis(msg, ip);
|
}
|
internal static bool SendHex(string ip, string msg)
|
{
|
return TcpServer.TcpServerSend(ip, Hex2Bytes(msg));
|
|
}
|
internal static void SendAscii(string ip, string msg)
|
{
|
TcpServer.TcpServerSend(ip, Encoding.ASCII.GetBytes(msg));
|
}
|
|
internal static byte[] Hex2Bytes(string hexString)
|
{
|
hexString = hexString.Replace(" ", "");
|
if ((hexString.Length % 2) != 0)
|
hexString += " ";
|
byte[] returnBytes = new byte[hexString.Length / 2];
|
for (int i = 0; i < returnBytes.Length; i++)
|
{
|
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
|
}
|
|
return returnBytes;
|
}
|
internal static string Hex2Ascii(string hexString)
|
{
|
hexString = hexString.Replace(" ", "");
|
if ((hexString.Length % 2) != 0)
|
hexString += " ";
|
byte[] returnBytes = new byte[hexString.Length / 2];
|
for (int i = 0; i < returnBytes.Length; i++)
|
{
|
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
|
}
|
return Encoding.ASCII.GetString(returnBytes);
|
}
|
|
#region 进制转换+CRC
|
internal static bool CheckCRC(string hex)
|
{
|
var result = false;
|
var data = hex.Replace(" ", "");
|
if (data.Length % 2 == 0)
|
{
|
var code1 = data.Substring(data.Length - 4, 4).ToLower();
|
var code2 = BitConverter.ToString(CRC16LH(Hex2Bytes(data.Substring(0, data.Length - 4)))).Replace("-", "").Replace(" ", "").ToLower();
|
result = code1 == code2;
|
}
|
return result;
|
}
|
internal static byte[] CRC16LH(byte[] pDataBytes)
|
{
|
ushort crc = 0xffff;
|
ushort polynom = 0xA001;
|
|
for (int i = 0; i < pDataBytes.Length; i++)
|
{
|
crc ^= pDataBytes[i];
|
for (int j = 0; j < 8; j++)
|
{
|
if ((crc & 0x01) == 0x01)
|
{
|
crc >>= 1;
|
crc ^= polynom;
|
}
|
else
|
{
|
crc >>= 1;
|
}
|
}
|
}
|
|
byte[] result = BitConverter.GetBytes(crc);
|
return result;
|
}
|
internal static byte[] CRC16HL(byte[] pDataBytes)
|
{
|
ushort crc = 0xffff;
|
ushort polynom = 0xA001;
|
|
for (int i = 0; i < pDataBytes.Length; i++)
|
{
|
crc ^= pDataBytes[i];
|
for (int j = 0; j < 8; j++)
|
{
|
if ((crc & 0x01) == 0x01)
|
{
|
crc >>= 1;
|
crc ^= polynom;
|
}
|
else
|
{
|
crc >>= 1;
|
}
|
}
|
}
|
|
byte[] result = BitConverter.GetBytes(crc).Reverse().ToArray();
|
return result;
|
}
|
|
#endregion
|
}
|