using HH.WCS.Mobox3.NFLZ.process; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WCS.Mobox3.NFLZ.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 } }