/// <summary> /// 高级参数下发 /// </summary> /// <param name="info"></param> /// <returns></returns> public Result SendAdvancedPara(AdvancedParaInfo info) { Result oResult = new Result(); byte[] arrbType = { 0x01, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E }; if (arrbType.ToList().Contains(info.type)) { //正确执行后面的代码 } else { oResult.message = "type参数错误"; return(oResult); } try { CmdAdvancedPara oCmdAdvancedPara = new CmdAdvancedPara(info); string strCmd = oCmdAdvancedPara.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 CmdAdvancedPara(AdvancedParaInfo info) { KEY = "CMD"; BODY_KEY = "BYPASS"; CLINET_ID = info.client_id; List <byte> lst = new List <byte>(); //控制器地址 lst.Add(info.addr); //写入 lst.Add(0x10); //写 //命令类型 lst.Add(info.type); //参数1 lst.Add(info.paramA); //参数2 lst.Add(info.paramB); //参数3 lst.Add(info.paramC); //参数4 lst.Add(info.paramD); //参数5 lst.Add(info.paramE); //参数6 lst.Add(info.paramF); //参数7 lst.Add(info.paramG); //计算校验(控制可以直接使用的) 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; }