using DOAN.Common.SocketHelper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DOAN.ServiceCore.MyMatchPush { public class Watchup { private static int PackageSort = 1; public static bool StartPush(string message, SocketGatewayServer _socketGateway) { //发送报警信息 //包头 byte[] packageHeader = { 0x5A }; //包序号 byte[] packsort = { (byte)PackageSort }; PackageSort++; if (PackageSort > 255) { PackageSort = 1; } // 地址 byte[] IPaddress = { 0xff, 0xff, 0xff, 0xff }; //命令码 byte[] CommandCode = { 0xE0 }; //数据长 //string message = $"产线:{record.LineCode},\n故障类型:{record.FaultDict},\n故障内容:{record.FaultContext},\n报警人:{record.AskPerson}"; // string message = $"产线:{record.LineCode}"; byte[] MessageData = Encoding.GetEncoding("GBK").GetBytes(message); byte[] MessageLength = { (byte)MessageData.Length }; // === 先拼接除 CRC 之外的所有部分 === byte[] dataWithoutCRC = packageHeader .Concat(packsort) .Concat(IPaddress) .Concat(CommandCode) .Concat(MessageLength) .Concat(MessageData).ToArray(); //CRC : 校验和,CRC 前面所有数据之和除 256 的余数 byte[] CRC = { SocketSenderHelper.CalculateChecksum(dataWithoutCRC) }; byte[] Body = dataWithoutCRC.Concat(CRC).ToArray(); return _socketGateway.SendToGateway(Body); } } }