/// <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);
        }
Ejemplo n.º 2
0
        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;
        }