/// <summary> /// 超级命令 /// </summary> /// <param name="info"></param> /// <returns></returns> public Result SendSuperCmd(SuperCmdInfo info) { Result oResult = new Result(); byte[] arrbType = { 0xFA, 0xFB, 0xFC }; if (arrbType.ToList().Contains(info.type)) { //正确执行后面的代码 } else { oResult.message = "type参数错误"; return(oResult); } try { CmdSuperCmd oCmdSuperCmd = new CmdSuperCmd(info); string strCmd = oCmdSuperCmd.GetPkg(); lock (NICSServerProgram.mMyServer) { var allSessions = NICSServerProgram.mMyServer.GetAllSessions(); int iCounter = allSessions.Count(p => p.ClientID == info.client_id); if (iCounter == 1) { MySession oMySession = allSessions.First(p => p.ClientID == info.client_id); oMySession.MySend(strCmd); NICSServerProgram.AddBypssMap(strCmd, DateTime.Now); oResult.message = "命令下发成功"; } else { oResult.message = "离线"; } } } catch (System.Exception ex) { oResult.message = ex.Message; } return(oResult); }
public CmdSuperCmd(SuperCmdInfo info) { KEY = "CMD"; BODY_KEY = "BYPASS"; CLINET_ID = info.client_id; List <byte> lst = new List <byte>(); //控制器地址 lst.Add(0xFA); //命令类型 lst.Add(info.type); //参数1 lst.Add(0); //参数2 lst.Add(0); //参数3 lst.Add(0); //参数4 lst.Add(0); //参数5 lst.Add(0); //参数6 lst.Add(0x00); //参数7 lst.Add(0x00); //参数8 lst.Add(0x00); //计算校验(控制可以直接使用的) string strCrc = CRC.ToModbusCRC16(lst.ToArray(), true); //是否翻转 //16进制,转成16进制显示 foreach (var m in lst) { CONTENT += Convert.ToString(m, 16).ToUpper().PadLeft(2, '0'); } CONTENT = info.regulator_id + " " + info.host_ip + " " + info.host_port + " " + CONTENT + strCrc; }