コード例 #1
0
        /// <summary>
        /// 生成测量序号
        /// </summary>
        /// <param name="pMessageFrame"></param>
        /// <param name="pIsNewMeasureNumber"></param>
        /// <param name="pChannelId"> </param>
        /// <param name="pPricode"> </param>
        private int GenerateMeasureSerialNumber(CommandMessageFrame pMessageFrame, bool pIsNewMeasureNumber, int pChannelId, int pPricode)
        {
            pMessageFrame.Header.Tag = -1;

            string v = string.Format("{0:d2}{1:d2}{2:d2}{3:d2}{4:d2}", DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour,
                                     DateTime.Now.Minute, DateTime.Now.Second);
            int serialNumber = int.Parse(v);
            var key          = pChannelId;

            if (pIsNewMeasureNumber)
            {
                pMessageFrame.Header.Tag       = serialNumber;//生成测量序号
                _deviceMeasureStateCaches[key] = new MonitorMeasureState
                {
                    MeasureSerialNumber = serialNumber,
                    Channelid           = pChannelId,
                    Pricode             = pPricode
                };
            }
            else
            {
                //使用已缓存某设备的测量序号
                if (_deviceMeasureStateCaches.ContainsKey(key))
                {
                    var state = _deviceMeasureStateCaches[key];
                    pMessageFrame.Header.Tag = serialNumber = state.MeasureSerialNumber;
                }
                else
                {
                    pMessageFrame.Header.Tag = -1;
                    serialNumber             = -1;
                }
            }
            return(serialNumber);
        }
コード例 #2
0
        /// <summary>
        /// 发送测量序号
        /// </summary>
        public void ChannelCommand(int channelid, int pricode)
        {
            var cmdMessageFrame = new CommandMessageFrame(RmtpCommand.CHANNEL);
            var serialNumber    = GenerateMeasureSerialNumber(cmdMessageFrame, true, channelid, pricode);
            var channelList     = new List <Tuple <string, string> >
            {
                new Tuple <string, string>("MSN", serialNumber.ToString()),
            };

            ExecuteCommand(RmtpCommand.CHANNEL, new object[] { channelList });
        }
コード例 #3
0
        /// <summary>
        /// 执行RMTP监测相关指令(监测指令和非监测指令)
        /// </summary>
        /// <param name="pCommand">命令类型</param>
        /// <param name="pParameter">命令携带参数</param>
        /// <param name="pPricode">是正在进行的控制的优先级代码,默认值:1</param>
        /// <param name="pChannelid">执行任务的设备通道号,默认值:0</param>
        /// <param name="pIsNewMeasureNumber">true - 生成新测量序号,false - 保持原测量序号</param>
        public void ExecuteCommand(RmtpCommand pCommand,
                                   object pParameter        = null,
                                   int pPricode             = 1,
                                   int pChannelid           = 0,
                                   bool pIsNewMeasureNumber = false)
        {
            if (_rmtpControler == null || !_rmtpControler.IsConnected)
            {
                AssistTool.WriteOutput(string.Format("Rmtp服务连接已断开,指令“{0}”无效", pCommand));
                return;
            }

            if (!_executeRmtpFun.ContainsKey(pCommand))
            {
                return;
            }

            var cmdMessageFrame = new CommandMessageFrame(pCommand);

            _executeRmtpFun[pCommand].CommandHandler(cmdMessageFrame, new[] { pParameter, pPricode, pChannelid });
            cmdMessageFrame.Header.ChannelId = pChannelid;

            _rmtpControler.Send(cmdMessageFrame);
        }