Beispiel #1
0
        /// <summary>
        /// 时钟,用来更显下边栏状态
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolTripTime_Tick(object sender, EventArgs e)
        {
            setUpTime();//   更新时间显示

            //if (DataSynLib.DataSyn.isRun) 数据同步ToolStripMenuItem.ForeColor = System.Drawing.Color.Green;
            //else 数据同步ToolStripMenuItem.ForeColor = System.Drawing.Color.Red;

            if (!isRefresh)
            {
                isRefresh = true;

                /*
                 * if (dtuServer != null)
                 * {
                 *  int count = dtuServer.AsyncSocketUserTokenList.count();//计算socket连接数量
                 *  //this.connectedStripStatusLabel.Text = count.ToString();//显示在线设备数量
                 * }
                 */

                this.connectedStripStatusLabel.Text = OnlineDeviceService.GetOnlineCount().ToString();//显示在线设备数量

                DateTime dateNow = DateTime.Now;
                if (!ToDtuCommand.isClear && ToDtuCommand.dateNew < dateNow.AddHours(-2))
                {
                    ShowLogData.add("【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "】清理ToDtuCommand信息");
                    ToDtuCommand.Clear();
                }
                if (!ToWaterDtuCommand.isClear && ToWaterDtuCommand.dateNew < dateNow.AddHours(-2))
                {
                    ShowLogData.add("【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "】清理ToWaterDtuCommand信息");
                    ToWaterDtuCommand.Clear();
                }

                /*
                 * timeCount = timeCount + 1;
                 * if (this.timeCount == 5)//5秒初始化一次大表格
                 * {
                 *  this.timeCount = 0;
                 *  lock (this.deviceListsDataGridView)
                 *  {
                 *      initDataGridView();
                 *  }
                 * }
                 * */

                isRefresh = false;
            }
        }
        public void closeClientSocket(AsyncSocketUserToken token, bool isUpdate)
        {
            if (token.DeviceList != null)
            {
                if (token.isClose)
                {
                    if (SysCache.ShowInfoLog)
                    {
                        string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,客户端{0}正在关闭", token.DeviceList.DeviceNo);
                        ShowLogData.add(info);
                        LogHelper.Info(info);
                    }
                    return;
                }
                token.isClose = true;

                if (SysCache.ShowInfoLog)
                {
                    string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,客户端{0},断开连接", token.DeviceList.DeviceNo);
                    ShowLogData.add(info);
                    LogHelper.Info(info);
                }

                if (isUpdate)
                {
                    token.DeviceList.Online        = 0;
                    token.DeviceList.LastUpdate    = DateTime.Now;
                    token.DeviceList.TerminalState = "设备断开连接";
                    token.InvokeElement.proxySendDeviceList(token.DeviceList, null);

                    /*未完成 更新终端状态*/
                    token.InvokeElement.updateDeviceList(token.DeviceList);
                }

                List <string> list = OnlineDeviceService.GetDeviceNoSubList(token.DeviceList.Id);
                if (list != null && list.Count > 0)
                {
                    foreach (string str in list)
                    {
                        Device device = OnlineDeviceService.GetOnline(str);
                        if (device != null)
                        {
                            if (SysCache.ShowInfoLog)
                            {
                                string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,客户端{0},从站断开连接,主站{1}断开", device.DeviceNo, token.DeviceList.DeviceNo);
                                ShowLogData.add(info);
                                LogHelper.Info(info);
                            }

                            device.Online        = 0;
                            device.LastUpdate    = DateTime.Now;
                            device.TerminalState = "设备断开连接";
                            token.InvokeElement.proxySendDeviceList(device, null);

                            token.InvokeElement.updateDeviceList(device);
                        }
                    }
                }

                string deviceNo = DeviceModule.GetFullDeviceNoByID(token.DeviceList.Id);
                OnlineDeviceService.RemoveOnline(deviceNo);
            }

            //修改于 2015-4-20
            if (token.ConnectedSocket == null)
            {
                return;
            }

            try
            {
                token.ConnectedSocket.Shutdown(SocketShutdown.Both);
            }
            catch (SocketException)
            {
            }
            catch (NullReferenceException e)
            {
                if (SysCache.ShowErrorLog)
                {
                    string error = string.Format("程序关闭连接时出错,错误信息{0}", e.Message);
                    LogHelper.Error(error);
                }
            }

            /*
             *
             * if (showInfoLog)
             * {
             *  string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,释放信号量资源");
             *  ShowLogData.add(info);
             *  LogHelper.Info(info);
             * }
             */
            //start update by kqz 2017-2-3修改,由之前的注释修改成不注释
            //由于在关闭掉客户端的时候,没有将此连接上来的客户端从已经连接的客户端集合中删除掉,所以导致一个客户端成功连接上后,再次断开
            //下次连接,如果IP地址不同则连接不成功现象。
            //并将此客户端资源回收到池中
            //释放信号量资源
            this.maxConnection.Release();//update by kqz 2017-3-28 9:34 将原来的注释取消
            this.asyncSocketUserTokenPool.push(token);
            if (showInfoLog)
            {
                string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,并将此客户端资源回收到池中,池中剩余数量{0}", asyncSocketUserTokenPool.Count);
                ShowLogData.add(info);
                LogHelper.Info(info);
            }

            //正在连接的集合中祛除此客户端信息
            this.asyncSocketUserTokenList.remove(token);
            if (showInfoLog)
            {
                string info = string.Format(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + token.ConnectedSocket.RemoteEndPoint.ToString() + "]:DTU通信服务,正在连接的集合中祛除此客户端信息,剩余连接数量{0}", asyncSocketUserTokenList.count());
                ShowLogData.add(info);
                LogHelper.Info(info);
            }
            // end update by kqz 2017-2-3修改,由之前的注释修改成不注释
            token.ConnectedSocket.Close();
            token.ConnectedSocket = null;
            token.isClose         = false;
        }
        public bool processPacket(byte[] buffer, int offset, int length)
        {
            int pos = 0;

            while (pos < length)
            {
                try
                {
                    if (buffer[pos] == HexStringUtility.StrToByteArray(ProtocolKey.ReceiveHeartThrob)[0] || length - pos < 14)
                    {
                        if (userToken.DeviceInfo != null && userToken.DeviceList != null)
                        {
                            userToken.DeviceList.Online        = 1;
                            userToken.DeviceList.LastUpdate    = DateTime.Now;
                            userToken.DeviceList.Remark        = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos);
                            userToken.DeviceList.TerminalState = "心跳";
                            updateDeviceList(userToken.DeviceList);
                            string FullDeviceNo = DeviceModule.GetFullDeviceNoByID(userToken.DeviceList.Id);
                            OnlineDeviceService.AddOnline(FullDeviceNo, userToken.DeviceList);
                            DeviceEvent deviceEvent = new DeviceEvent();
                            deviceEvent.DeviceNo  = userToken.DeviceInfo.DeviceNo;
                            deviceEvent.EventTime = userToken.DeviceList.LastUpdate;
                            deviceEvent.EventType = userToken.DeviceList.TerminalState;
                            deviceEvent.Remark    = "";
                            deviceEvent.RawData   = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos);
                            proxySendDeviceList(userToken.DeviceList, deviceEvent);
                        }
                        byte[] data = HexStringUtility.StrToByteArray("%");
                        send(data, 0, data.Length);
                        if (SysCache.ShowInfoLog)
                        {
                            string info1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]响应(信息不对):" + "长度不到14";
                            LogHelper.Info(info1);
                            ShowLogData.add(info1);
                        }

                        if (length - pos < 14)
                        {
                            break;
                        }
                        else
                        {
                            pos += 1;
                        }
                    }
                    else if (buffer[pos] == BaseProtocol.BeginChar)
                    {
                        int    bodyLength = buffer[pos + 1]; //长度
                        byte[] bs         = new byte[5 + bodyLength];
                        Array.Copy(buffer, pos, bs, 0, bs.Length);

                        processCommandBase(bs);

                        pos += 5 + bodyLength;
                    }
                    else if (buffer[pos] == WaterBaseProtocol.BeginChar[0] && buffer[pos + 1] == WaterBaseProtocol.BeginChar[1])
                    {
                        byte[] bs_UpOrDown_Length = new byte[2];
                        Array.Copy(buffer, pos + 11, bs_UpOrDown_Length, 0, 2);

                        string str_UpOrDown_Length = HexStringUtility.ByteArrayToHexString(bs_UpOrDown_Length).ToUpper();
                        string str_Length          = str_UpOrDown_Length.Substring(1, 3);
                        int    bodyLength          = Convert.ToInt32(str_Length, 16); //正文长度

                        int baseLength = 0;                                           //其它长度
                        baseLength += 2;                                              //帧起始符
                        baseLength += 6;                                              //中心站及遥测站
                        baseLength += 2;                                              //密码
                        baseLength += 1;                                              //功能码
                        baseLength += 2;                                              //报文上下行表示及长度
                        baseLength += 1;                                              //报文起始符
                        baseLength += 1;                                              //报文结束符
                        baseLength += 2;                                              //校验码
                        byte[] bs = new byte[baseLength + bodyLength];
                        Array.Copy(buffer, pos, bs, 0, bs.Length);

                        processCommandWater(bs);

                        pos += baseLength + bodyLength;
                    }
                    else
                    {
                        pos += 1;
                    }
                }
                catch (Exception ex)
                {
                    if (userToken.DeviceInfo != null && userToken.DeviceList != null)
                    {
                        userToken.DeviceList.Online        = 1;
                        userToken.DeviceList.LastUpdate    = DateTime.Now;
                        userToken.DeviceList.Remark        = FormatHelper.ByteArrayToHexString(buffer, offset, length);
                        userToken.DeviceList.TerminalState = "心跳";
                        updateDeviceList(userToken.DeviceList);
                        string FullDeviceNo = DeviceModule.GetFullDeviceNoByID(userToken.DeviceList.Id);
                        OnlineDeviceService.AddOnline(FullDeviceNo, userToken.DeviceList);
                        DeviceEvent deviceEvent = new DeviceEvent();
                        deviceEvent.DeviceNo  = userToken.DeviceInfo.DeviceNo;
                        deviceEvent.EventTime = userToken.DeviceList.LastUpdate;
                        deviceEvent.EventType = userToken.DeviceList.TerminalState;
                        deviceEvent.Remark    = "";
                        deviceEvent.RawData   = FormatHelper.ByteArrayToHexString(buffer, offset + pos, length - pos);
                        proxySendDeviceList(userToken.DeviceList, deviceEvent);
                    }
                    byte[] data = HexStringUtility.StrToByteArray("%");
                    send(data, 0, data.Length);
                    if (SysCache.ShowInfoLog)
                    {
                        string info1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]响应(信息不对):" + "【错误】【pos:" + pos + "】:" + ex.Message;
                        LogHelper.Info(info1);
                        ShowLogData.add(info1);
                    }
                    break;
                }
            }
            return(true);
        }
Beispiel #4
0
        private void send(object o)
        {
            SafeSetLabel(this.label7, "", false);

            setAllButtonEnable(false);

            string OperationType = "";
            int    k             = 0;

            try
            {
                k = Convert.ToInt32(o);
                switch (k)
                {
                case 1: OperationType = "设置时间"; break;

                case 2: OperationType = "设置开采量"; break;

                case 3: OperationType = "查询时间"; break;

                case 4: OperationType = "查询开采量"; break;

                case 5: OperationType = "远程开泵"; break;

                case 6: OperationType = "远程关泵"; break;

                case 7: OperationType = "设置主站射频地址"; break;

                case 8: OperationType = "屏蔽卡号"; break;

                case 9: OperationType = "解除屏蔽卡号"; break;

                case 10: OperationType = "水位计参数设置"; break;

                case 11: OperationType = "水位计参数查询"; break;

                case 12: OperationType = "水位查询"; break;

                case 13: OperationType = "状态查询"; break;

                default: OperationType = ""; break;
                }
                if (OperationType.Trim() == "")
                {
                    SafeSetText(textBox2, "发送命令非法!命令字:" + k, false);
                    setAllButtonEnable(true);
                    return;
                }
            }
            catch (Exception ex)
            {
                SafeSetText(textBox2, "发送命令非法!" + ex.Message, false);
                setAllButtonEnable(true);
                return;
            }

            try
            {
                if (this.comboBox1.SelectedIndex < 1)
                {
                    SafeSetText(textBox2, "请选择一个终端", false);
                    setAllButtonEnable(true);
                    return;
                }
                string deviceNo    = this.comboBox1.Text.ToString().Trim();
                Device device      = DeviceModule.GetDeviceByFullDeviceNo(deviceNo);
                string resDeviceNo = DeviceModule.GetDeviceNoMain(deviceNo);
                Device resDevice   = DeviceModule.GetDeviceByFullDeviceNo(resDeviceNo);
                if (resDeviceNo.Length != 15)
                {
                    SafeSetText(textBox2, "终端编号错误!" + resDeviceNo, false);
                    setAllButtonEnable(true);
                    return;
                }

                BaseMessage cmd = new BaseMessage();
                switch (k)
                {
                case 1:
                    if (dateTimePicker1.Value < DateTime.Now.AddDays(-1) || dateTimePicker1.Value > DateTime.Now.AddDays(1))
                    {
                        SafeSetText(textBox2, "终端时钟取值范围是当前时间前后一天", false);
                        setAllButtonEnable(true);
                        return;
                    }

                    CmdToDtuSetDateTime cmd1 = new CmdToDtuSetDateTime();
                    cmd1.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd1.StationType  = (byte)device.StationType;
                    cmd1.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd1.DateTimeNew  = dateTimePicker1.Value;
                    cmd1.RawDataChar  = cmd1.WriteMsg();
                    cmd1.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd1.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd1.AddressField + "-" + cmd1.AFN, cmd1);

                    cmd.AddressField = cmd1.AddressField;
                    cmd.RawDataStr   = cmd1.RawDataStr;
                    cmd.RawDataChar  = cmd1.RawDataChar;
                    cmd.AFN          = cmd1.AFN;
                    break;

                case 2:
                    decimal YearExploitation = 0;
                    try
                    {
                        YearExploitation = decimal.Parse(this.textBox4.Text.Trim());
                    }
                    catch { }
                    if (YearExploitation < 0 || YearExploitation > 9999999.9M)
                    {
                        SafeSetText(textBox2, "开采量取值范围是0-9999999.9", false);
                        setAllButtonEnable(true);
                        return;
                    }

                    CmdToDtuSetYearExploitation cmd2 = new CmdToDtuSetYearExploitation();
                    cmd2.AddressField     = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd2.StationType      = (byte)device.StationType;
                    cmd2.StationCode      = device.StationType == 2 ? device.StationCode : 0;
                    cmd2.YearExploitation = YearExploitation;
                    cmd2.RawDataChar      = cmd2.WriteMsg();
                    cmd2.RawDataStr       = HexStringUtility.ByteArrayToHexString(cmd2.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd2.AddressField + "-" + cmd2.AFN, cmd2);

                    cmd.AddressField = cmd2.AddressField;
                    cmd.RawDataStr   = cmd2.RawDataStr;
                    cmd.RawDataChar  = cmd2.RawDataChar;
                    cmd.AFN          = cmd2.AFN;
                    break;

                case 3:
                    CmdToDtuQueryDateTime cmd3 = new CmdToDtuQueryDateTime();
                    cmd3.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd3.StationType  = (byte)device.StationType;
                    cmd3.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd3.RawDataChar  = cmd3.WriteMsg();
                    cmd3.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd3.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd3.AddressField + "-" + cmd3.AFN, cmd3);

                    cmd.AddressField = cmd3.AddressField;
                    cmd.RawDataStr   = cmd3.RawDataStr;
                    cmd.RawDataChar  = cmd3.RawDataChar;
                    cmd.AFN          = cmd3.AFN;
                    break;

                case 4:
                    CmdToDtuQueryYearExploitation cmd4 = new CmdToDtuQueryYearExploitation();
                    cmd4.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd4.StationType  = (byte)device.StationType;
                    cmd4.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd4.RawDataChar  = cmd4.WriteMsg();
                    cmd4.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd4.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd4.AddressField + "-" + cmd4.AFN, cmd4);

                    cmd.AddressField = cmd4.AddressField;
                    cmd.RawDataStr   = cmd4.RawDataStr;
                    cmd.RawDataChar  = cmd4.RawDataChar;
                    cmd.AFN          = cmd4.AFN;
                    break;

                case 5:
                    CmdToDtuOpenPump cmd5 = new CmdToDtuOpenPump();
                    cmd5.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd5.StationType  = (byte)device.StationType;
                    cmd5.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd5.RawDataChar  = cmd5.WriteMsg();
                    cmd5.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd5.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd5.AddressField + "-" + cmd5.AFN, cmd5);

                    cmd.AddressField = cmd5.AddressField;
                    cmd.RawDataStr   = cmd5.RawDataStr;
                    cmd.RawDataChar  = cmd5.RawDataChar;
                    cmd.AFN          = cmd5.AFN;
                    break;

                case 6:
                    CmdToDtuClosePump cmd6 = new CmdToDtuClosePump();
                    cmd6.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd6.StationType  = (byte)device.StationType;
                    cmd6.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd6.RawDataChar  = cmd6.WriteMsg();
                    cmd6.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd6.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd6.AddressField + "-" + cmd6.AFN, cmd6);

                    cmd.AddressField = cmd6.AddressField;
                    cmd.RawDataStr   = cmd6.RawDataStr;
                    cmd.RawDataChar  = cmd6.RawDataChar;
                    cmd.AFN          = cmd6.AFN;
                    break;

                case 7:
                    CmdToDtuSetStationCode cmd7 = new CmdToDtuSetStationCode();
                    if (device.StationType == 0)
                    {
                        SafeSetText(textBox2, "非主从站无法设置分站射频地址", false);
                        setAllButtonEnable(true);
                        return;
                    }
                    else if (device.StationType == 1)
                    {
                        cmd7.AddressField = deviceNo.Substring(0, 12) + Convert.ToInt32(deviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                        cmd7.StationType  = (byte)device.StationType;
                        cmd7.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                        List <Device> DeviceSubList = DeviceModule.GetAllDeviceSubList(device.Id);
                        List <int>    list          = new List <int>();
                        foreach (Device DeviceSub in DeviceSubList)
                        {
                            list.Add(DeviceSub.StationCode);
                        }
                        cmd7.StationCodeList = list;
                    }
                    else if (device.StationType == 2)
                    {
                        cmd7.AddressField = resDeviceNo.Substring(0, 12) + Convert.ToInt32(resDeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                        cmd7.StationType  = (byte)resDevice.StationType;
                        cmd7.StationCode  = resDevice.StationType == 2 ? resDevice.StationCode : 0;
                        List <Device> DeviceSubList = DeviceModule.GetAllDeviceSubList(resDevice.Id);
                        List <int>    list          = new List <int>();
                        foreach (Device DeviceSub in DeviceSubList)
                        {
                            list.Add(DeviceSub.StationCode);
                        }
                        cmd7.StationCodeList = list;
                    }
                    cmd7.RawDataChar = cmd7.WriteMsg();
                    cmd7.RawDataStr  = HexStringUtility.ByteArrayToHexString(cmd7.RawDataChar);

                    ToDtuCommand.AddBaseMessageToDtu(cmd7.AddressField + "-" + cmd7.AFN, cmd7);

                    cmd.AddressField = cmd7.AddressField;
                    cmd.RawDataStr   = cmd7.RawDataStr;
                    cmd.RawDataChar  = cmd7.RawDataChar;
                    cmd.AFN          = cmd7.AFN;

                    break;

                case 8:
                    string SerialNumber1 = this.textBox3.Text.Trim();
                    if (SerialNumber1.Length != 8)
                    {
                        SafeSetText(textBox2, "卡号长度只能为8位", false);
                        setAllButtonEnable(true);
                        return;
                    }
                    if (!Regex.IsMatch(SerialNumber1, "^[0-9A-Fa-f]+$"))
                    {
                        SafeSetText(textBox2, "卡号只能为0-9A-Fa-f", false);
                        setAllButtonEnable(true);
                        return;
                    }

                    CmdToDtuShieldSerialNumber cmd8 = new CmdToDtuShieldSerialNumber();
                    cmd8.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd8.StationType  = (byte)device.StationType;
                    cmd8.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd8.SerialNumber = SerialNumber1;
                    cmd8.RawDataChar  = cmd8.WriteMsg();
                    cmd8.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd8.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd8.AddressField + "-" + cmd8.AFN, cmd8);

                    cmd.AddressField = cmd8.AddressField;
                    cmd.RawDataStr   = cmd8.RawDataStr;
                    cmd.RawDataChar  = cmd8.RawDataChar;
                    cmd.AFN          = cmd8.AFN;
                    break;

                case 9:
                    string SerialNumber2 = this.textBox3.Text.Trim();
                    if (SerialNumber2.Length != 8)
                    {
                        SafeSetText(textBox2, "卡号长度只能为8位", false);
                        setAllButtonEnable(true);
                        return;
                    }
                    if (!Regex.IsMatch(SerialNumber2, "^[0-9A-Fa-f]+$"))
                    {
                        SafeSetText(textBox2, "卡号只能为0-9A-Fa-f", false);
                        setAllButtonEnable(true);
                        return;
                    }

                    CmdToDtuShieldSerialNumberCancel cmd9 = new CmdToDtuShieldSerialNumberCancel();
                    cmd9.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd9.StationType  = (byte)device.StationType;
                    cmd9.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd9.SerialNumber = SerialNumber2;
                    cmd9.RawDataChar  = cmd9.WriteMsg();
                    cmd9.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd9.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd9.AddressField + "-" + cmd9.AFN, cmd9);

                    cmd.AddressField = cmd9.AddressField;
                    cmd.RawDataStr   = cmd9.RawDataStr;
                    cmd.RawDataChar  = cmd9.RawDataChar;
                    cmd.AFN          = cmd9.AFN;
                    break;

                case 10:
                    CmdToDtuSetGroundWaterParam cmd10 = new CmdToDtuSetGroundWaterParam();
                    cmd10.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd10.StationType  = (byte)device.StationType;
                    cmd10.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd10.Range        = byte.Parse(this.txtRange.Text.Trim());
                    cmd10.LineLength   = double.Parse(this.txtLineLength.Text.Trim());
                    cmd10.RawDataChar  = cmd10.WriteMsg();
                    cmd10.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd10.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd10.AddressField + "-" + cmd10.AFN, cmd10);

                    cmd.AddressField = cmd10.AddressField;
                    cmd.RawDataStr   = cmd10.RawDataStr;
                    cmd.RawDataChar  = cmd10.RawDataChar;
                    cmd.AFN          = cmd10.AFN;
                    break;

                case 11:
                    CmdToDtuQueryGroundWaterParam cmd11 = new CmdToDtuQueryGroundWaterParam();
                    cmd11.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd11.StationType  = (byte)device.StationType;
                    cmd11.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd11.RawDataChar  = cmd11.WriteMsg();
                    cmd11.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd11.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd11.AddressField + "-" + cmd11.AFN, cmd11);

                    cmd.AddressField = cmd11.AddressField;
                    cmd.RawDataStr   = cmd11.RawDataStr;
                    cmd.RawDataChar  = cmd11.RawDataChar;
                    cmd.AFN          = cmd11.AFN;
                    break;

                case 12:
                    CmdToDtuQueryGroundWater cmd12 = new CmdToDtuQueryGroundWater();
                    cmd12.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd12.StationType  = (byte)device.StationType;
                    cmd12.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd12.RawDataChar  = cmd12.WriteMsg();
                    cmd12.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd12.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd12.AddressField + "-" + cmd12.AFN, cmd12);

                    cmd.AddressField = cmd12.AddressField;
                    cmd.RawDataStr   = cmd12.RawDataStr;
                    cmd.RawDataChar  = cmd12.RawDataChar;
                    cmd.AFN          = cmd12.AFN;
                    break;

                case 13:
                    CmdToDtuQueryState cmd13 = new CmdToDtuQueryState();
                    cmd13.AddressField = DeviceModule.DeviceNo_Normal2Hex(deviceNo);
                    cmd13.StationType  = (byte)device.StationType;
                    cmd13.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd13.RawDataChar  = cmd13.WriteMsg();
                    cmd13.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd13.RawDataChar);
                    ToDtuCommand.AddBaseMessageToDtu(cmd13.AddressField + "-" + cmd13.AFN, cmd13);

                    cmd.AddressField = cmd13.AddressField;
                    cmd.RawDataStr   = cmd13.RawDataStr;
                    cmd.RawDataChar  = cmd13.RawDataChar;
                    cmd.AFN          = cmd13.AFN;
                    break;
                }

                SafeSetText(textBox2, cmd.RawDataStr, false);
                SafeSetText(textBox2, Environment.NewLine + "添加发送命令保存!" + cmd.AddressField + "-" + cmd.AFN, true);

                DeviceOperation op = new DeviceOperation();
                op.DeviceNo      = deviceNo;
                op.DeviceName    = DeviceModule.GetDeviceByFullDeviceNo(deviceNo).DeviceName;
                op.OperationTime = DateTime.Now;
                op.OperationType = OperationType;
                op.RawData       = cmd.RawDataStr;
                op.Remark        = "";
                op.UserId        = -1;
                op.UserName      = "******";
                op.State         = "等待发送";

                if (OnlineDeviceService.GetOnline(deviceNo) != null || OnlineDeviceService.GetOnline(resDeviceNo) != null)
                {
                    if (bridge != null)
                    {
                        if (bridge.sendToDtu(deviceNo, resDeviceNo, cmd.RawDataChar, 0, cmd.RawDataChar.Length))
                        {
                            op.State = "发送成功";
                        }
                        else
                        {
                            op.State = "发送失败";
                        }
                    }

                    DeviceOperationModule.AddDeviceOperation(op);

                    if (op.State == "发送失败")
                    {
                        ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                    }

                    if (ToDtuCommand.GetBaseMessageToDtuByKey(cmd.AddressField + "-" + cmd.AFN) != null)
                    {
                        int  timeDelay = 0;
                        bool flag      = false;
                        while (timeDelay < 300)
                        {
                            BaseMessage res = null;
                            switch (k)
                            {
                            case 1:
                                res = (CmdResponseToDtuSetDateTime)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuSetDateTime)res).DateTimeNew.ToString("yyyy-MM-dd HH:mm:ss"), true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 2:
                                res = (CmdResponseToDtuSetYearExploitation)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuSetYearExploitation)res).YearExploitation, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 3:
                                res = (CmdResponseToDtuQueryDateTime)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuQueryDateTime)res).DateTimeNew.ToString("yyyy-MM-dd HH:mm:ss"), true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 4:
                                res = (CmdResponseToDtuQueryYearExploitation)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuQueryYearExploitation)res).YearExploitation, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 5:
                                res = (CmdResponseToDtuOpenPump)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuOpenPump)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 6:
                                res = (CmdResponseToDtuClosePump)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuClosePump)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 7:
                                res = (CmdResponseToDtuSetStationCode)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuSetStationCode)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 8:
                                res = (CmdResponseToDtuShieldSerialNumber)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuShieldSerialNumber)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 9:
                                res = (CmdResponseToDtuShieldSerialNumberCancel)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuShieldSerialNumberCancel)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 10:
                                res = (CmdResponseToDtuSetGroundWaterParam)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuSetGroundWaterParam)res).Result, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 11:
                                res = (CmdResponseToDtuQueryGroundWaterParam)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuQueryGroundWaterParam)res).Range + " | " + ((CmdResponseToDtuQueryGroundWaterParam)res).LineLength, true);
                                    SafeSetText(txtRange, ((CmdResponseToDtuQueryGroundWaterParam)res).Range.ToString(), false);
                                    SafeSetText(txtLineLength, ((CmdResponseToDtuQueryGroundWaterParam)res).LineLength.ToString(), false);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 12:
                                res = (CmdResponseToDtuQueryGroundWater)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuQueryGroundWater)res).Acq_Time.ToString("yyyy-MM-dd HH:mm:ss") + " | " + ((CmdResponseToDtuQueryGroundWater)res).GroundWaterLevel + " | " + ((CmdResponseToDtuQueryGroundWater)res).LineLength, true);
                                    SafeSetText(txtAcq_Time, ((CmdResponseToDtuQueryGroundWater)res).Acq_Time.ToString("yyyy-MM-dd HH:mm:ss"), false);
                                    SafeSetText(txtGroundWaterLevel, ((CmdResponseToDtuQueryGroundWater)res).GroundWaterLevel.ToString(), false);
                                    SafeSetText(txtLineLength, ((CmdResponseToDtuQueryGroundWater)res).LineLength.ToString(), false);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;

                            case 13:
                                res = (CmdResponseToDtuQueryState)ToDtuCommand.GetBaseMessageFromDtuByKey(cmd.AddressField + "-" + cmd.AFN);
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + OperationType + "成功!" + timeDelay + ",返回结果:" + ((CmdResponseToDtuQueryState)res).State +
                                                ",上报时间:" + ((CmdResponseToDtuQueryState)res).DateTimeNew.ToString("yyyy-MM-dd HH:mm:ss") +
                                                //",累计用电量:" + ((CmdResponseToDtuQueryState)res).ElectricUsed +
                                                ",累计用水量:" + ((CmdResponseToDtuQueryState)res).WaterUsed, true);
                                    ToDtuCommand.RemoveBaseMessageFromDtu(cmd.AddressField + "-" + cmd.AFN);
                                    flag = true;
                                }
                                break;
                            }
                            if (flag)
                            {
                                if (res != null)
                                {
                                    SafeSetText(textBox2, Environment.NewLine + "是否带密码:" + (res.IsPW ? "1|" + res.PW : "0") + ",是否带时间戳:" + (res.IsTP ? "1|" + res.TP : "0"), true);
                                }
                                break;
                            }
                            Thread.Sleep(100);
                            timeDelay = timeDelay + 1;
                        }
                        if (!flag)
                        {
                            SafeSetText(textBox2, Environment.NewLine + OperationType + "出错!" + "响应超时", true);
                        }
                    }
                    else
                    {
                        SafeSetText(textBox2, Environment.NewLine + OperationType + "出错!" + "无命令保存", true);
                    }
                }
                else
                {
                    op.State = "终端离线";
                    SafeSetText(textBox2, Environment.NewLine + OperationType + "出错!" + "终端离线", true);
                }
                DeviceOperationModule.AddDeviceOperation(op);
            }
            catch (Exception ex)
            {
                SafeSetText(textBox2, OperationType + "出错!" + Environment.NewLine + ex.Message, false);
            }

            setAllButtonEnable(true);
        }
Beispiel #5
0
 internal OnlineDeviceServiceProxy(OnlineDeviceService service)
 {
     OnlineDeviceService = service;
 }