예제 #1
0
        private void button2_Click(object sender, EventArgs e)
        {
            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;
            }

            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(dateTimePicker1.Value);
            cmd6.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd6.RawDataChar);

            this.textBox2.Text = cmd6.RawDataStr;
        }
예제 #2
0
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            short    SerialNumberTmp;
            DateTime SendTimeTmp;
            string   msg = WaterBaseMessageService.GetSerialNumberAndSendTime(UserData, out SerialNumberTmp, out SendTimeTmp);

            if (msg == "")
            {
                SerialNumber = SerialNumberTmp;
                SendTime     = SendTimeTmp;
            }
            else
            {
                if (ShowLog)
                {
                    logHelper.Error(msg);
                }
                return(msg);
            }

            return("");
        }
예제 #3
0
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            try
            {
                int count = Convert.ToInt32(UserData.Substring(16, 2), 16);
                Ps = new bool[8 * count];
                string hexStr = UserData.Substring(18, count * 2);
                string binStr = HexStringUtility.HexStringToBinString(hexStr);
                for (int i = 0; i < binStr.Length; i++)
                {
                    Ps[binStr.Length - i - 1] = binStr[i] == '1';
                }
            }
            catch (Exception ex) {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取泵开关状态出错" + " " + RawDataStr);
                }
                return("获取泵开关状态出错");
            }

            return("");
        }
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            try
            {
                RC = Convert.ToByte(UserData.Substring(16), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取定值控制出错" + " " + RawDataStr);
                }
                return("获取定值控制出错");
            }

            return("");
        }
        public override bool processCommand(DTU.GateWay.Protocol.Command command)
        {
            string receive = HexStringUtility.ByteArrayToHexString(command.Data);

            LogHelper.Info("收到的数据为:[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]" + receive);
            ShowLogData.add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]" + receive);

            byte[] data = HexStringUtility.HexStringToByteArray(receive);
            //data[data.Length - 1] = FormatHelper.CheckSum(data, 0, data.Length - 1);
            send(data, 0, data.Length);

            return(true);
        }
예제 #6
0
        private JavaScriptObject ClosePumpCmd(HttpRequest request)
        {
            string DeviceNo = request["DeviceNo"] ?? "";
            string SendTime = request["SendTime"] ?? "";

            JavaScriptObject result = new JavaScriptObject();

            result.Add("Result", false);
            result.Add("Message", "");
            try
            {
                DateTime OperationTime = DateTime.Parse(SendTime);

                CmdToDtuClosePump cmd = new CmdToDtuClosePump();
                cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                byte[] bs  = cmd.WriteMsg(OperationTime);
                string str = HexStringUtility.ByteArrayToHexString(bs);

                Device device = DeviceModule.GetDeviceByFullDeviceNo(DeviceNo);
                if (device == null)
                {
                    result["Message"] = "设备长编号" + DeviceNo + "不存在!";
                }
                else
                {
                    DeviceOperation op = new DeviceOperation();

                    op.DeviceNo      = DeviceNo;
                    op.DeviceName    = device.DeviceName;
                    op.OperationTime = OperationTime;
                    op.OperationType = "远程关泵";
                    op.RawData       = str;
                    op.Remark        = "";
                    op.UserId        = 0;
                    op.UserName      = "******";
                    op.State         = "发送成功";

                    DeviceOperationModule.AddDeviceOperation(op);

                    result["Result"] = true;
                }
            }
            catch (Exception ex)
            {
                result["Message"] = "关泵命令保存出错!";
                myLogger.Error(ex.Message);
            }
            return(result);
        }
        public override byte[] WriteMsg()
        {
            string data = HexStringUtility.ByteArrayToHexString(new byte[] { Result });

            IsPW = false;
            PW   = "";
            IsTP = false;
            TP   = "";

            UserData = data;

            UserDataBytes = HexStringUtility.HexStringToByteArray(UserData);

            return(WriteMsg2());
        }
예제 #8
0
        public override string GetHexStr()
        {
            StringBuilder builderC = new StringBuilder();

            if (ImgContent != null)
            {
                builderC.Append(HexStringUtility.ByteArrayToHexString(ImgContent));
            }

            StringBuilder builder = new StringBuilder();

            builder.Append(Key.ToString("X").PadLeft(2, '0'));
            builder.Append(Length.ToString("X").PadLeft(2, '0'));
            builder.Append(builderC.ToString());
            return(builder.ToString());
        }
예제 #9
0
        public override byte[] WriteMsg()
        {
            string data = Sum.ToString("X").PadLeft(4, '0');

            data += Curr.ToString("X").PadLeft(4, '0');
            data += HexStringUtility.ByteArrayToHexString(Content);

            IsPW = false;
            PW   = "";
            IsTP = false;
            TP   = "";

            UserData = data;

            UserDataBytes = HexStringUtility.HexStringToByteArray(UserData);

            return(WriteMsg2());
        }
예제 #10
0
        public override string ReadMsg()
        {
            StationCodeList = new List <int>();

            try
            {
                byte[] StationCodeListBytes = new byte[UserDataBytes.Length];
                Array.Copy(UserDataBytes, 0, StationCodeListBytes, 0, StationCodeListBytes.Length);
                for (int i = 0; i < StationCodeListBytes.Length / 2; i++)
                {
                    byte[] bytes = new byte[] { StationCodeListBytes[i * 2], StationCodeListBytes[i * 2 + 1] };
                    StationCodeList.Add(Convert.ToInt32(HexStringUtility.ByteArrayToHexString(bytes), 16));
                }
            }
            catch (Exception ex)
            {
                return("获取射频地址list出错!" + ex.Message);
            }

            return("");
        }
        public override byte[] WriteMsg()
        {
            int yy = DateTimeNew.Year - 2000;
            int MM = DateTimeNew.Month;
            int dd = DateTimeNew.Day;
            int HH = DateTimeNew.Hour;
            int mm = DateTimeNew.Minute;
            int ss = DateTimeNew.Second;
            int dw = (int)DateTimeNew.DayOfWeek;

            if (dw == 0)
            {
                dw = 7;
            }

            string tt    = Convert.ToString(dw, 2).PadLeft(3, '0') + (MM >= 10 ? "1" : "0");
            string dw_MM = string.Format("{0:x}", Convert.ToInt32(tt, 2)) + (MM % 10).ToString() + "";

            string data = HexStringUtility.ByteArrayToHexString(new byte[] { Result }) +
                          ss.ToString().PadLeft(2, '0') +
                          mm.ToString().PadLeft(2, '0') +
                          HH.ToString().PadLeft(2, '0') +
                          dd.ToString().PadLeft(2, '0') +
                          dw_MM +
                          yy.ToString().PadLeft(2, '0') +
                          "";

            IsPW = false;
            PW   = "";
            IsTP = false;
            TP   = "";

            UserData = data;

            UserDataBytes = HexStringUtility.HexStringToByteArray(UserData);

            return(WriteMsg2());
        }
        public virtual string ReadMsg()
        {
            string msg = "";

            if (RawDataChar == null)
            {
                return("无数据");
            }

            if (RawDataChar.Length >= 14)
            {
                if (RawDataChar[0] == BaseProtocol.BeginChar && RawDataChar[RawDataChar.Length - 1] == BaseProtocol.EndChar)
                {
                    Length = (int)RawDataChar[1];
                    byte[] Body_b = new byte[Length];
                    byte   bState = RawDataChar[2];

                    IsPW = bState % 2 > 0;
                    IsTP = bState % 4 > 2;

                    Array.Copy(RawDataChar, 3, Body_b, 0, Body_b.Length);
                    CC  = RawDataChar[RawDataChar.Length - 2];
                    AFN = RawDataChar[14];
                    byte   CCN = FormatHelper.GetXorByte(Body_b, 0, Body_b.Length);
                    string s   = "CCN = " + CCN + "  Length =  " + Length + " body_b .length is " + Body_b.Length;
                    //update by kqz 2017-10:40 解决文件下发问题
                    if ((AFN == (byte)BaseProtocol.AFN.ToDtuSendFile) || (CCN == CC))
                    {
                        ControlField = RawDataChar[3];
                        //if (ControlField == (byte)BaseProtocol.ControlField.FromDtu)
                        if (Enum.IsDefined(typeof(BaseProtocol.ControlField), (int)ControlField))
                        {
                            StationType = RawDataChar[11];
                            StationCode = Convert.ToInt32(HexStringUtility.ByteArrayToHexString(new byte[] { RawDataChar[12], RawDataChar[13] }), 16);
                            AFN         = RawDataChar[14];
                            if (Enum.IsDefined(typeof(BaseProtocol.AFN), (int)AFN))
                            {
                                byte[] AddressField_b = new byte[7];
                                Array.Copy(RawDataChar, 4, AddressField_b, 0, 7);
                                AddressField = HexStringUtility.ByteArrayToHexString(AddressField_b);

                                //用户数据长度为长度减控制域1字节减地址域7字节减应用层功能码1字节减设备类型1字节减射频地址2字节减密码减时间戳
                                UserDataBytes = new byte[Length - 1 - 7 - 1 - 1 - 2 - (IsTP ? 2 : 0) - (IsPW ? 5 : 0)];
                                Array.Copy(RawDataChar, 15, UserDataBytes, 0, UserDataBytes.Length);
                                UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

                                try
                                {
                                    if (IsTP)
                                    {
                                        byte[] TPBytes = new byte[5];
                                        Array.Copy(RawDataChar, RawDataChar.Length - 2 - 5, TPBytes, 0, TPBytes.Length);
                                        TP = HexStringUtility.ByteArrayToHexString(TPBytes);
                                    }
                                    if (IsPW)
                                    {
                                        byte[] PWBytes = new byte[2];
                                        Array.Copy(RawDataChar, RawDataChar.Length - 2 - 2 - (IsTP ? 5 : 0), PWBytes, 0, PWBytes.Length);
                                        PW = HexStringUtility.ByteArrayToHexString(PWBytes);
                                    }
                                }
                                catch
                                {
                                    msg = "密码时间戳格式不正确,IsPW:" + (IsPW ? "yes" : "no") + ",IsTP:" + (IsTP ? "yes" : "no");
                                }
                            }
                            else
                            {
                                msg = "功能码不对," + AFN.ToString("X");
                            }
                        }
                        else
                        {
                            msg = "控制域不对," + ControlField.ToString("X");
                        }
                    }
                    else
                    {
                        msg = s + "   校验码不对," + CC;
                    }
                }
                else
                {
                    msg = "开始结束字符不对," + RawDataChar[0].ToString("X") + " " + RawDataChar[RawDataChar.Length - 1].ToString("X");
                }
            }
            else
            {
                msg = "长度不足14," + RawDataChar.Length;
            }

            return(msg);
        }
        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);
        }
예제 #14
0
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            try
            {
                StartTime = DateTime.ParseExact("20" + UserData.Substring(16, 8) + "0000", "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取起始时间出错" + " " + RawDataStr);
                }
                return("获取起始时间出错");
            }

            try
            {
                EndTime = DateTime.ParseExact("20" + UserData.Substring(24, 8) + "0000", "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取结束时间出错" + " " + RawDataStr);
                }
                return("获取结束时间出错");
            }

            try
            {
                byte key_04 = Convert.ToByte(UserData.Substring(32, 2), 16);
                if (key_04 != (int)Identifier_Standard._04)
                {
                    return("获取时间步长码出错");
                }
                string LengthStr_04 = UserData.Substring(34, 2);
                int[]  LS_04        = WaterBaseProtocol.GetLengthList(LengthStr_04);
                int    ByteCount_04 = LS_04[0];
                int    Digits_04    = LS_04[1];

                Iden_04 = new Identifier_04();
                Iden_04.SetVal(ByteCount_04, Digits_04, UserData.Substring(36, 6));
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取时间步长码出错" + " " + RawDataStr);
                }
                return("获取时间步长码出错");
            }

            try
            {
                byte Key = Convert.ToByte(UserData.Substring(42, 2), 16);
                if (Key == (byte)Identifier_Standard._FF)
                {
                    byte KeySub = Convert.ToByte(UserData.Substring(44, 2), 16);
                    if (KeySub == (byte)Identifier_Custom._03)
                    {
                        Iden = new Identifier_FF_03();
                    }
                    else if (KeySub == (byte)Identifier_Custom._0E)
                    {
                        Iden = new Identifier_FF_0E();
                    }
                }
                else
                {
                    if (Key == (byte)Identifier_Standard._03)
                    {
                        Iden = new Identifier_03();
                    }
                    else if (Key == (byte)Identifier_Standard._0E)
                    {
                        Iden = new Identifier_0E();
                    }
                    else if (Key == (byte)Identifier_Standard._1A)
                    {
                        Iden = new Identifier_1A();
                    }
                    else if (Key == (byte)Identifier_Standard._1F)
                    {
                        Iden = new Identifier_1F();
                    }
                    else if (Key == (byte)Identifier_Standard._20)
                    {
                        Iden = new Identifier_20();
                    }
                    else if (Key == (byte)Identifier_Standard._26)
                    {
                        Iden = new Identifier_26();
                    }
                    else if (Key == (byte)Identifier_Standard._38)
                    {
                        Iden = new Identifier_38();
                    }
                    else if (Key == (byte)Identifier_Standard._39)
                    {
                        Iden = new Identifier_39();
                    }
                    else if (Key == (byte)Identifier_Standard._F4)
                    {
                        Iden = new Identifier_F4();
                    }
                    else if (Key == (byte)Identifier_Standard._F5)
                    {
                        Iden = new Identifier_F5();
                    }
                }
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取要素标识符出错" + " " + RawDataStr);
                }
                return("获取要素标识符出错");
            }

            return("");
        }
예제 #15
0
        //上传文件
        private string upSingleFile(HttpPostedFile file, byte typeStr, LoginUser loginUser, long DevId)
        {
            if (!SystemService.isConnect)
            {
                return("no|与通讯服务器连接中断!");
            }
            Device device = DeviceModule.GetDeviceByID(DevId);

            if (device == null)
            {
                return("no|要操作的设备不存在!");
            }

            string DeviceNo = DeviceModule.GetFullDeviceNoByID(device.Id);

            string infos  = "";
            bool   fileOK = false;
            string fileExtension;
            string fileName = System.IO.Path.GetFileName(file.FileName);

            if (fileName != "")
            {
                if (file.ContentLength >= 1024 * 1024 * 1)
                {
                    infos = "no|文件太大,目前仅支持1M以内的文档!";
                }
                else
                {
                    string theFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + DeviceNo + "_" + System.IO.Path.GetFileNameWithoutExtension(fileName);
                    if (typeStr == 0x01)
                    {
                        theFileName += ".jpg";
                    }
                    else if (typeStr == 0x02)
                    {
                        theFileName += ".bin";
                    }

                    fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
                    //String[] allowedExtensions = { ".jpg", ".jpeg", ".gif", ".bmp", ".png", ".icon" };
                    String[] allowedExtensions = { };
                    if (allowedExtensions.Length > 0)
                    {
                        for (int i = 0; i < allowedExtensions.Length; i++)
                        {
                            if (fileExtension == allowedExtensions[i])
                            {
                                fileOK = true;
                                break;
                            }
                        }
                    }
                    else
                    {
                        fileOK = true;
                    }

                    if (!fileOK)
                    {
                        infos = "no|不支持上传此类型文件!目前支持的图片格式有:" + String.Join("|", allowedExtensions);
                    }
                    else
                    {
                        /**********start update by kqz 2017-3-8*****************/
                        //int packetSize = 230;
                        int packetSize = 256;
                        /**********end update by kqz 2017-3-8 20:27****************/
                        string        path = System.Web.HttpContext.Current.Request.MapPath("~/UploadFiles/User/" + loginUser.LoginName + "/");
                        DirectoryInfo dir  = new DirectoryInfo(path);
                        if (!dir.Exists)
                        {
                            dir.Create();
                        }
                        file.SaveAs(path + theFileName);

                        byte[] bsOld = new byte[file.ContentLength];
                        file.InputStream.Read(bsOld, 0, bsOld.Length);
                        file.InputStream.Seek(0, SeekOrigin.Begin);
                        //start update by kqz 2017-3-20
                        int count = 0;
                        //Debug.Print("len =========" + file.ContentLength);
                        //int count = file.ContentLength / packetSize + 1;
                        if ((file.ContentLength % packetSize) == 0)
                        {
                            count = file.ContentLength / packetSize;
                        }
                        else
                        {
                            count = file.ContentLength / packetSize + 1;
                        }
                        //end update by kqz 2017-3-20
                        //byte[] bsNew = new byte[file.ContentLength];

                        for (int i = 0; i < count; i++)
                        {
                            #region 发送数据
                            try
                            {
                                byte[] bs;
                                if (i != count - 1)
                                {
                                    bs = new byte[packetSize];
                                }
                                else
                                {
                                    bs = new byte[file.ContentLength - packetSize * i];
                                }

                                if (i == 0)
                                {
                                    bs    = new byte[packetSize + 1];
                                    bs[0] = typeStr;
                                    Array.Copy(bsOld, 0, bs, 1, bs.Length - 1);
                                    //update by kqz 2017-3-20
                                    //Array.Copy(bsOld, 0, bs, 1, bs.Length - 1);
                                    //Array.Copy(bs, 1, bsNew, 0, bs.Length - 1);
                                }
                                else
                                {
                                    Array.Copy(bsOld, packetSize * i, bs, 0, bs.Length);
                                    //}
                                    //Array.Copy(bsOld, packetSize * i - 1, bs, 0, bs.Length);
                                    //Array.Copy(bs, 0, bsNew, packetSize * i - 1, bs.Length);
                                }
                                Debug.Print("aaaaaaaaaaaaaaaaaaaaaa------------------\r\n");
                                CmdToDtuSendFile cmd = new CmdToDtuSendFile();
                                cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                                cmd.StationType  = (byte)device.StationType;
                                cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                                cmd.Sum          = (short)count;
                                cmd.Curr         = (short)(i + 1);
                                cmd.Content      = bs;
                                cmd.RawDataChar  = cmd.WriteMsg();
                                cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                                DeviceOperation op = new DeviceOperation();
                                op.DeviceNo      = DeviceNo;
                                op.DeviceName    = device.DeviceName;
                                op.OperationTime = DateTime.Now;
                                op.OperationType = "中心下发文件";
                                op.RawData       = cmd.RawDataStr;
                                op.Remark        = cmd.Sum + "|" + cmd.Curr;
                                op.UserId        = loginUser.UserId;
                                op.UserName      = SysUserModule.GetUser(loginUser.UserId).UserName;
                                op.State         = "等待发送";

                                myLogger.Info(op.OperationType + ":" + cmd.RawDataStr);
                                byte[] cmd_send = cmd.RawDataChar;
                                myLogger.Error((i + 1).ToString().PadLeft(count.ToString().Length, '0') + ":" + cmd.RawDataStr);

                                ResMsg resMsg = SendCmd(cmd_send);
                                #region 判断结果
                                if (resMsg.Result)
                                {
                                    if (resMsg.Message == BaseProtocol.DeviceOffline)
                                    {
                                        infos = "no|查询终端不在线!";
                                    }
                                    else
                                    {
                                        byte[]      cmd_receive = HexStringUtility.HexStringToByteArray(resMsg.Message);
                                        BaseMessage message     = new BaseMessage();
                                        message.RawDataChar = cmd_receive;
                                        string msg = message.ReadMsg();
                                        //myLogger.Error("------------------the id is ========= +" +cmd_receive[19] +"  ff \r\n");
                                        //if (cmd_receive[19] == 0x00)
                                        //{
                                        // op.State = "发送失败";
                                        // infos = "no|" + "终端正忙,请稍候传输数据!";
                                        //return "发送失败,终端正忙,请稍候传输数据!";
                                        // }
                                        if (msg == "")
                                        {
                                            CmdResponseToDtuSendFile res = new CmdResponseToDtuSendFile(message);
                                            string msg1 = res.ReadMsg();
                                            if (msg1 == "")
                                            {
                                                if (res.Result == 1)
                                                {
                                                    op.State = "发送成功";
                                                    //infos = "yes|结果为1,继续";
                                                }
                                                else
                                                {
                                                    op.State = "发送成功";
                                                    infos    = "no|结果为0,退出";
                                                }
                                            }
                                            else
                                            {
                                                op.State = "发送失败";
                                                infos    = "no|" + msg1;
                                            }
                                        }
                                        else
                                        {
                                            op.State = "发送失败";
                                            infos    = "no|" + msg;
                                        }

                                        if (cmd_receive[19] == 0x00)
                                        {
                                            op.State = "发送失败";
                                            infos    = "no|" + "终端正忙,请稍候传输数据!";
                                            //return "发送失败,终端正忙,请稍候传输数据!";
                                        }

                                        if (i == count - 1)
                                        {
                                            op.State = "发送成功";
                                            infos    = "no|结果为0,退出";
                                        }
                                    }
                                }
                                else
                                {
                                    return("发送失败");
                                }
                                #endregion
                                if (infos.StartsWith("no|"))
                                {
                                    op.State += "|" + infos.Split('|')[1];
                                }
                                DeviceOperationModule.AddDeviceOperation(op);
                                if (op.State.Contains("发送失败"))
                                {
                                    myLogger.Error((i + 1).ToString().PadLeft(count.ToString().Length, '0') + "-" + count + ":" + infos);
                                    return(infos);
                                }
                            }
                            catch (Exception e)
                            {
                                myLogger.Error((i + 1).ToString().PadLeft(count.ToString().Length, '0') + "-" + count + ":出错,发送失败" + e.Message + "  the trace :" + e.StackTrace);
                                //return "no|" + (i + 1);
                            }
                            #endregion
                        }


                        infos = "yes|" + theFileName.Split('_')[2];
                    }
                }
            }
            else
            {
                infos = "no|未选择文件!";
            }
            return(infos);
        }
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            Values = new byte[12];

            try
            {
                Values[0] = Convert.ToByte(UserData.Substring(18, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取1小时黄色预警值出错" + " " + RawDataStr);
                }
                return("获取1小时黄色预警值出错");
            }

            try
            {
                Values[1] = Convert.ToByte(UserData.Substring(20, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取1小时橙色预警值出错" + " " + RawDataStr);
                }
                return("获取1小时橙色预警值出错");
            }

            try
            {
                Values[2] = Convert.ToByte(UserData.Substring(22, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取1小时红色预警值出错" + " " + RawDataStr);
                }
                return("获取1小时红色预警值出错");
            }

            try
            {
                Values[3] = Convert.ToByte(UserData.Substring(26, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取3小时黄色预警值出错" + " " + RawDataStr);
                }
                return("获取3小时黄色预警值出错");
            }

            try
            {
                Values[4] = Convert.ToByte(UserData.Substring(28, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取3小时橙色预警值出错" + " " + RawDataStr);
                }
                return("获取3小时橙色预警值出错");
            }

            try
            {
                Values[5] = Convert.ToByte(UserData.Substring(30, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取3小时红色预警值出错" + " " + RawDataStr);
                }
                return("获取3小时红色预警值出错");
            }

            try
            {
                Values[6] = Convert.ToByte(UserData.Substring(34, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取6小时黄色预警值出错" + " " + RawDataStr);
                }
                return("获取6小时黄色预警值出错");
            }

            try
            {
                Values[7] = Convert.ToByte(UserData.Substring(36, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取6小时橙色预警值出错" + " " + RawDataStr);
                }
                return("获取6小时橙色预警值出错");
            }

            try
            {
                Values[8] = Convert.ToByte(UserData.Substring(38, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取6小时红色预警值出错" + " " + RawDataStr);
                }
                return("获取6小时红色预警值出错");
            }

            try
            {
                Values[9] = Convert.ToByte(UserData.Substring(42, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取12小时黄色预警值出错" + " " + RawDataStr);
                }
                return("获取12小时黄色预警值出错");
            }

            try
            {
                Values[10] = Convert.ToByte(UserData.Substring(44, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取12小时橙色预警值出错" + " " + RawDataStr);
                }
                return("获取12小时橙色预警值出错");
            }

            try
            {
                Values[11] = Convert.ToByte(UserData.Substring(46, 2), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取12小时红色预警值出错" + " " + RawDataStr);
                }
                return("获取12小时红色预警值出错");
            }

            return("");
        }
예제 #17
0
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            string Remain = UserData.Substring(16).ToUpper();

            string          msg           = "";
            List <RTUParam> List_RTUParam = RTUParam.analyse(Remain, AFN, out msg);

            if (msg == "")
            {
                if (List_RTUParam.Count == 2)
                {
                    if (List_RTUParam[0].GetKey() == (byte)RTUParam.RTUParamKey._03)
                    {
                        oldPW = (RTUParam_03)List_RTUParam[0];
                    }
                    else
                    {
                        msg = "数据体非法,参数1关键字非法";
                    }

                    if (List_RTUParam[1].GetKey() == (byte)RTUParam.RTUParamKey._03)
                    {
                        newPW = (RTUParam_03)List_RTUParam[0];
                    }
                    else
                    {
                        msg = "数据体非法,参数1关键字非法";
                    }
                }
                else
                {
                    msg = "数据体非法,参数不为2个";
                }
            }

            return("");
        }
        public string WriteMsgBase()
        {
            isCorrect = false;
            ROW       = 1;

            if (!Enum.IsDefined(typeof(WaterBaseProtocol.UpOrDown), (int)UpOrDown))
            {
                if (ShowLog)
                {
                    logHelper.Error("上下行标识非法,0或8!" + UpOrDown);
                }
                return("上下行标识非法,0或8!" + UpOrDown);
            }

            if (DataBeginChar == (byte)WaterBaseProtocol.DataBeginChar.SYN)
            {
                if (TotalPackage > 0xFFF || TotalPackage < 0)
                {
                    if (ShowLog)
                    {
                        logHelper.Error("包总数非法,0-4095!" + TotalPackage);
                    }
                    return("包总数非法,0-4095!" + TotalPackage);
                }

                if (CurrentPackage > 0xFFF || CurrentPackage < 0)
                {
                    if (ShowLog)
                    {
                        logHelper.Error("序列号非法,0-4095!" + CurrentPackage);
                    }
                    return("序列号非法,0-4095!" + CurrentPackage);
                }

                Length = 3 + UserDataBytes.Length;
            }
            else
            {
                DataBeginChar = (byte)WaterBaseProtocol.DataBeginChar.STX;
                Length        = UserDataBytes.Length;
            }

            if (Length > 0xFFF || Length < 0x001)
            {
                if (ShowLog)
                {
                    logHelper.Error("长度非法,0-4095!" + Length);
                }
                return("长度非法,0-4095!" + Length);
            }

            try
            {
                List <byte> list = new List <byte>();

                list.AddRange(BeginChar);
                if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Up)
                {
                    list.Add(CenterStation);
                    list.AddRange(HexStringUtility.HexStringToByteArray(RemoteStation));
                }
                else if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Down)
                {
                    list.AddRange(HexStringUtility.HexStringToByteArray(RemoteStation));
                    list.Add(CenterStation);
                }
                list.AddRange(HexStringUtility.HexStringToByteArray(PW));
                list.Add(AFN);

                list.AddRange(HexStringUtility.HexStringToByteArray(UpOrDown.ToString() + Convert.ToString(Length, 16).ToUpper().PadLeft(3, '0')));
                list.Add(DataBeginChar);
                if (DataBeginChar == (byte)WaterBaseProtocol.DataBeginChar.SYN)
                {
                    list.AddRange(HexStringUtility.HexStringToByteArray(Convert.ToString(TotalPackage, 16).ToUpper().PadLeft(3, '0') +
                                                                        Convert.ToString(CurrentPackage, 16).ToUpper().PadLeft(3, '0')));
                }
                if (UserDataBytes.Length > 0)
                {
                    list.AddRange(UserDataBytes);
                }
                list.Add(DataEndChar);
                CC = CRC.crc16(list.ToArray());
                Array.Reverse(CC);
                list.AddRange(CC);

                RawDataChar = list.ToArray();
                RawDataStr  = HexStringUtility.ByteArrayToHexString(RawDataChar).ToUpper();
                UserData    = HexStringUtility.ByteArrayToHexString(UserDataBytes).ToUpper();

                isCorrect = true;
                return("");
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error("出错!" + ex.Message);
                }
                return("出错!" + ex.Message);
            }
        }
예제 #19
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);
        }
예제 #20
0
        private void btnReOpen_Click(object sender, EventArgs e)
        {
            if (this.dataGridView1.SelectedRows.Count < 1)
            {
                MessageBox.Show("请选择一行记录!");
                return;
            }
            string SerialNumber   = this.dataGridView1.SelectedRows[0].Cells["SerialNumber"].Value.ToString();
            string UserNo         = this.dataGridView1.SelectedRows[0].Cells["UserNo"].Value.ToString();
            string UserName       = this.dataGridView1.SelectedRows[0].Cells["UserName"].Value.ToString();
            string IdentityNumber = this.dataGridView1.SelectedRows[0].Cells["IdentityNumber"].Value.ToString();

            byte[] newUserName = null;
            newUserName = HexStringUtility.StrToByteArray("".PadRight(16, ' '));

            string DeviceList = this.dataGridView1.SelectedRows[0].Cells["DeviceList"].Value.ToString();

            string ResidualWater    = this.dataGridView1.SelectedRows[0].Cells["ResidualWater"].Value.ToString();
            string ResidualElectric = this.dataGridView1.SelectedRows[0].Cells["ResidualElectric"].Value.ToString();
            string TotalWater       = this.dataGridView1.SelectedRows[0].Cells["TotalWater"].Value.ToString();
            string TotalElectric    = this.dataGridView1.SelectedRows[0].Cells["TotalElectric"].Value.ToString();
            string showInfo         = "确定重新开卡当前选择用户卡?" + Environment.NewLine + "卡号:" + UserNo + ",用户名:" + UserName +
                                      Environment.NewLine + "身份证号:" + IdentityNumber;

            if ((MessageBox.Show(showInfo, "重新开卡", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) == DialogResult.Yes)
            {
                Log(getDateStr() + "开始重新开卡");

                if (!SeedIC())
                {
                    Log("寻卡失败");
                    Log(getDateStr() + "结束重新开卡");
                    return;
                }

                string SerialNumberNew = getSnr().ToString("X");

                //保存远程服务器数据库
                string           str    = DataTransfer.ReOpenCardUser(SerialNumber, SerialNumberNew);
                JavaScriptObject result = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);
                if (bool.Parse(result["Result"].ToString()))
                {
                    MessageBox.Show("取消挂失成功!");
                    SearchCardUser();
                }
                else
                {
                    string txt = result["Message"].ToString();
                    MessageBox.Show(txt);
                    myLogger.Error(txt);
                    Log(txt);
                    Log(getDateStr() + "结束重新开卡");
                    return;
                }

                int    mode           = 4;         //以B密码认证
                int    sec            = 1;         //扇区
                int    block          = 0;
                string key            = getKeyA(); //读卡密码
                string result_WriteIC = "";
                string result_AuthIC  = "";

                //设置扇区1内容
                sec = 1;
                //认证卡密码B
                result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
                if (result_AuthIC == InfoSys.StrAuthSuccess)
                {
                    //写数据块0,数据块0为卡类型(1字节)、用户卡号(4字节)
                    block          = 0;
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (InfoSys.CardTypeUser + UserNo.PadLeft(8, '0')).PadRight(32, '0'));
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    //写数据块1,数据块1为用户名(16字节)
                    block          = 1;
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block, HexStringUtility.ByteArrayToHexString(newUserName));
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    //写数据块2,数据块2为身份证号(9字节)、联系电话(6字节)
                    block          = 2;
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block, (IdentityNumber + "0" + Telephone).PadRight(32, '0'));
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    //写数据块3,密码eeeeeeeeeeee
                    block = 3;
                    CardCommon.WritePWD(icdev, sec, block, getKeyA(), InfoSys.KeyControl, getKeyB());
                }
                else
                {
                    Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                    Log(getDateStr() + "结束重新开卡");
                    return;
                }

                //设置扇区2内容
                sec = 2;
                //认证卡密码B
                result_AuthIC = CardCommon.AuthIC(icdev, mode, sec, key);
                AuthLog(InfoSys.CardTypeStrUser, InfoSys.MethodOpenCard, sec, result_AuthIC);
                if (result_AuthIC == InfoSys.StrAuthSuccess)
                {
                    //写数据块0,剩余可用水量(4字节)剩余可用电量(4字节)累计用水量(4字节)累计用电量(4字节)
                    block = 0;
                    double d1 = Tools.StringToDouble(ResidualWater, 0);
                    double d2 = Tools.StringToDouble(ResidualElectric, 0);
                    double d3 = Tools.StringToDouble(TotalWater, 0);
                    double d4 = Tools.StringToDouble(TotalElectric, 0);
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block,
                                                        d1.ToString().PadLeft(8, '0') +
                                                        d2.ToString().PadLeft(8, '0') +
                                                        d3.ToString().PadLeft(8, '0') +
                                                        d4.ToString().PadLeft(8, '0'));
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    string[] s           = { "", "", "", "" };
                    string[] DeviceLists = DeviceList.Split(',');

                    for (int i = 0; i < DeviceLists.Length; i++)
                    {
                        s[i] = DeviceLists[i];
                    }

                    string data = "";
                    //写数据块1,地址码1(7字节)地址码2(7字节)
                    block          = 1;
                    data           = (s[0] + s[1]).PadRight(32, '0');
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block, data);
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    //写数据块2,地址码1(7字节)地址码2(7字节)
                    block          = 2;
                    data           = (s[2] + s[3]).PadRight(32, '0');
                    result_WriteIC = CardCommon.WriteIC(icdev, sec, block, data);
                    if (result_WriteIC != "")
                    {
                        Log("重新写卡扇区" + sec + "数据块" + block + "写入失败");
                        Log(getDateStr() + "结束重新开卡");
                        return;
                    }

                    //写数据块3,密码eeeeeeeeeeee
                    block = 3;
                    CardCommon.WritePWD(icdev, sec, block, getKeyA(), InfoSys.KeyControl, getKeyB());
                }

                Log("重新开卡完成");
                Log(getDateStr() + "结束重新开卡");
            }
        }
        public string ReadMsgBase()
        {
            isCorrect      = false;
            ROW            = 2;
            IsWaterMessage = false;

            try
            {
                if (RawDataChar == null)
                {
                    if (ShowLog)
                    {
                        logHelper.Error("无法获取信息!");
                    }
                    return("无法获取信息!");
                }
                if (RawDataChar.Length < 18)
                {
                    if (ShowLog)
                    {
                        logHelper.Error("无法获取信息长度不够!");
                    }
                    return("无法获取信息长度不够!");
                }

                BeginChar = new byte[2];
                Array.Copy(RawDataChar, 0, BeginChar, 0, 2);
                if (BeginChar[0] != WaterBaseProtocol.BeginChar[0] || BeginChar[1] != WaterBaseProtocol.BeginChar[1])
                {
                    if (ShowLog)
                    {
                        logHelper.Error("起始字符非法!" + HexStringUtility.ByteArrayToHexString(BeginChar).ToUpper());
                    }
                    return("起始字符非法!" + HexStringUtility.ByteArrayToHexString(BeginChar).ToUpper());
                }

                byte[] CCP = new byte[RawDataChar.Length - 2];
                Array.Copy(RawDataChar, 0, CCP, 0, CCP.Length);
                byte[] CCC = CRC.crc16(CCP);
                Array.Reverse(CCC);
                CC = new byte[2];
                Array.Copy(RawDataChar, RawDataChar.Length - 2, CC, 0, 2);
                if (CCC[0] != CC[0] || CCC[1] != CC[1])
                {
                    if (ShowLog)
                    {
                        logHelper.Error("校验码非法!" + HexStringUtility.ByteArrayToHexString(CC).ToUpper() + "|" + HexStringUtility.ByteArrayToHexString(CCC).ToUpper());
                    }
                    return("校验码非法!" + HexStringUtility.ByteArrayToHexString(CC).ToUpper() + "|" + HexStringUtility.ByteArrayToHexString(CCC).ToUpper());
                }

                IsWaterMessage = true;

                AFN = RawDataChar[10];
                if (!Enum.IsDefined(typeof(WaterBaseProtocol.AFN), (int)AFN))
                {
                    if (ShowLog)
                    {
                        logHelper.Error("功能码非法!" + Convert.ToString(AFN, 16));
                    }
                    return("功能码非法!" + Convert.ToString(AFN, 16));
                }

                DataBeginChar = RawDataChar[13];
                if (!Enum.IsDefined(typeof(WaterBaseProtocol.DataBeginChar), (int)DataBeginChar))
                {
                    if (ShowLog)
                    {
                        logHelper.Error("报文起始符非法!" + Convert.ToString(DataBeginChar, 16));
                    }
                    return("报文起始符非法!" + Convert.ToString(DataBeginChar, 16));
                }

                byte[] bs_UpOrDown_Length = new byte[2];
                Array.Copy(RawDataChar, 11, bs_UpOrDown_Length, 0, 2);
                string str_UpOrDown_Length = HexStringUtility.ByteArrayToHexString(bs_UpOrDown_Length).ToUpper();
                string str_UpOrDown        = str_UpOrDown_Length.Substring(0, 1);
                UpOrDown = Convert.ToInt32(str_UpOrDown, 16);
                if (!Enum.IsDefined(typeof(WaterBaseProtocol.UpOrDown), (int)UpOrDown))
                {
                    if (ShowLog)
                    {
                        logHelper.Error("上下行标识非法!" + Convert.ToString(UpOrDown, 16));
                    }
                    return("上下行标识非法!" + Convert.ToString(UpOrDown, 16));
                }

                DataEndChar = RawDataChar[RawDataChar.Length - 3];
                if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Up)
                {
                    if (!Enum.IsDefined(typeof(WaterBaseProtocol.DataEndChar_Up), (int)DataEndChar))
                    {
                        if (ShowLog)
                        {
                            logHelper.Error("上行报文结束符非法!" + Convert.ToString(DataBeginChar, 16));
                        }
                        return("上行报文结束符非法!" + Convert.ToString(DataBeginChar, 16));
                    }
                }
                else if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Down)
                {
                    if (!Enum.IsDefined(typeof(WaterBaseProtocol.DataEndChar_Down), (int)DataEndChar))
                    {
                        if (ShowLog)
                        {
                            logHelper.Error("下行报文结束符非法!" + Convert.ToString(DataBeginChar, 16));
                        }
                        return("下行报文结束符非法!" + Convert.ToString(DataBeginChar, 16));
                    }
                }

                string str_Length = str_UpOrDown_Length.Substring(1, 3);
                Length = Convert.ToInt32(str_Length, 16);

                byte[] bs_RemoteStation = new byte[5];
                if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Up)
                {
                    CenterStation = RawDataChar[2];
                    Array.Copy(RawDataChar, 3, bs_RemoteStation, 0, 5);
                }
                else if (UpOrDown == (int)WaterBaseProtocol.UpOrDown.Down)
                {
                    Array.Copy(RawDataChar, 2, bs_RemoteStation, 0, 5);
                    CenterStation = RawDataChar[7];
                }
                RemoteStation = HexStringUtility.ByteArrayToHexString(bs_RemoteStation).ToUpper();

                byte[] bs_PW = new byte[2];
                Array.Copy(RawDataChar, 8, bs_PW, 0, 2);
                PW = HexStringUtility.ByteArrayToHexString(bs_PW).ToUpper();

                if (DataBeginChar == 0x16)
                {
                    byte[] bs_TotalPackage_CurrentPackage = new byte[3];
                    Array.Copy(RawDataChar, 13 + 1, bs_TotalPackage_CurrentPackage, 0, 3);
                    string str_TotalPackage_CurrentPackage = HexStringUtility.ByteArrayToHexString(bs_TotalPackage_CurrentPackage).ToUpper();
                    string str_TotalPackage = str_TotalPackage_CurrentPackage.Substring(0, 3);
                    TotalPackage = Convert.ToInt32(str_TotalPackage, 16);
                    string str_CurrentPackage = str_TotalPackage_CurrentPackage.Substring(3, 3);
                    CurrentPackage = Convert.ToInt32(str_CurrentPackage, 16);
                    UserDataBytes  = new byte[Length - 3];
                    Array.Copy(RawDataChar, 13 + 1 + 3, UserDataBytes, 0, UserDataBytes.Length);
                }
                else
                {
                    TotalPackage   = 0;
                    CurrentPackage = 0;
                    if (Length > 0)
                    {
                        UserDataBytes = new byte[Length];
                        Array.Copy(RawDataChar, 13 + 1, UserDataBytes, 0, UserDataBytes.Length);
                    }
                    else
                    {
                        UserDataBytes = new byte[0];
                    }
                }
                UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes).ToUpper();

                isCorrect = true;
                return("");
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error("出错!" + ex.Message);
                }
                return("出错!" + ex.Message);
            }
        }
        private JavaScriptObject send(HttpRequest request)
        {
            string DeviceNo         = request["DeviceNo"] ?? "";
            string k                = request["k"] ?? "";
            string content          = request["content"] ?? "";
            string DeviceTime       = request["DeviceTime"] ?? "";
            string YearExploitation = request["YearExploitation"] ?? "";
            string SerialNumber     = request["SerialNumber"] ?? "";
            string Range            = request["Range"] ?? "";
            string LineLength       = request["LineLength"] ?? "";

            JavaScriptObject result = new JavaScriptObject();

            result.Add("Result", false);
            result.Add("Message", "");

            if (DeviceNo.Length != 15)
            {
                result["Message"] = "设备编号格式不对!";
                return(result);
            }

            Device device = DeviceModule.GetDeviceByFullDeviceNo(DeviceNo);

            if (device == null)
            {
                result["Message"] = "设备编号不存在!" + DeviceNo;
                return(result);
            }

            try
            {
                bool waitRsp = false;

                TcpCommunication tcpService = new TcpCommunication();

                int timeDelay = 0;
                //待socket准备好
                while (timeDelay < tcpService.TcpWait)
                {
                    if ((tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CONNECTED) ||
                        (tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CLOSED))
                    {
                        break;
                    }

                    Thread.Sleep(100);
                    timeDelay = timeDelay + 1;
                }

                if (tcpService.SOCKET_STATE != TcpCommunication.TCP_SocketState.SOCKET_CONNECTED)
                {
                    result["Message"] = "与网关通讯失败!";
                    return(result);
                }

                byte[] cmd_send = null;

                if (k == "1")
                {
                    CmdToDtuSetDateTime cmd = new CmdToDtuSetDateTime();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.DateTimeNew  = DateTime.Parse(DeviceTime);
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "2")
                {
                    CmdToDtuQueryDateTime cmd = new CmdToDtuQueryDateTime();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "3")
                {
                    CmdToDtuSetYearExploitation cmd = new CmdToDtuSetYearExploitation();
                    cmd.AddressField     = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType      = (byte)device.StationType;
                    cmd.StationCode      = device.StationType == 2 ? device.StationCode : 0;
                    cmd.YearExploitation = decimal.Parse(YearExploitation);
                    cmd.RawDataChar      = cmd.WriteMsg();
                    cmd.RawDataStr       = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "4")
                {
                    CmdToDtuQueryYearExploitation cmd = new CmdToDtuQueryYearExploitation();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "5")
                {
                    CmdToDtuOpenPump cmd = new CmdToDtuOpenPump();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "6")
                {
                    CmdToDtuClosePump cmd = new CmdToDtuClosePump();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "7")
                {
                    CmdToDtuSetStationCode cmd = new CmdToDtuSetStationCode();

                    if (device.StationType == 0)
                    {
                        result["Message"] = "非主从站无法设置分站射频地址!";
                        return(result);
                    }
                    else if (device.StationType == 1)
                    {
                        cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                        cmd.StationType  = (byte)device.StationType;
                        cmd.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);
                        }
                        cmd.StationCodeList = list;
                    }
                    else if (device.StationType == 2)
                    {
                        Device DeviceMain   = DeviceModule.GetDeviceByID(device.MainId);
                        string DeviceMainNo = DeviceModule.GetFullDeviceNoByID(device.MainId);
                        cmd.AddressField = DeviceMainNo.Substring(0, 12) + Convert.ToInt32(DeviceMainNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                        cmd.StationType  = (byte)DeviceMain.StationType;
                        cmd.StationCode  = DeviceMain.StationType == 2 ? DeviceMain.StationCode : 0;
                        List <Device> DeviceSubList = DeviceModule.GetAllDeviceSubList(device.MainId);
                        List <int>    list          = new List <int>();
                        foreach (Device DeviceSub in DeviceSubList)
                        {
                            list.Add(DeviceSub.StationCode);
                        }
                        cmd.StationCodeList = list;
                    }

                    cmd.RawDataChar = cmd.WriteMsg();
                    cmd.RawDataStr  = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "8")
                {
                    if (SerialNumber.Length != 8)
                    {
                        result["Message"] = "卡号长度只能为8位!";
                        return(result);
                    }
                    if (!Regex.IsMatch(SerialNumber, "^[0-9A-Fa-f]+$"))
                    {
                        result["Message"] = "卡号只能为0-9A-Fa-f!";
                        return(result);
                    }

                    CmdToDtuShieldSerialNumber cmd = new CmdToDtuShieldSerialNumber();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.SerialNumber = SerialNumber;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "9")
                {
                    if (SerialNumber.Length != 8)
                    {
                        result["Message"] = "卡号长度只能为8位!";
                        return(result);
                    }
                    if (!Regex.IsMatch(SerialNumber, "^[0-9A-Fa-f]+$"))
                    {
                        result["Message"] = "卡号只能为0-9A-Fa-f!";
                        return(result);
                    }

                    CmdToDtuShieldSerialNumberCancel cmd = new CmdToDtuShieldSerialNumberCancel();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.SerialNumber = SerialNumber;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "10")
                {
                    CmdToDtuSetGroundWaterParam cmd = new CmdToDtuSetGroundWaterParam();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.Range        = byte.Parse(Range);
                    cmd.LineLength   = double.Parse(LineLength);
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "11")
                {
                    CmdToDtuQueryGroundWaterParam cmd = new CmdToDtuQueryGroundWaterParam();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "12")
                {
                    CmdToDtuQueryGroundWater cmd = new CmdToDtuQueryGroundWater();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else if (k == "13")
                {
                    CmdToDtuQueryState cmd = new CmdToDtuQueryState();
                    cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                    cmd.StationType  = (byte)device.StationType;
                    cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                    cmd.RawDataChar  = cmd.WriteMsg();
                    cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                    myLogger.Info(cmd.RawDataStr);

                    cmd_send = cmd.RawDataChar;
                }
                else
                {
                    result["Message"] = "参数错误!";
                    return(result);
                }
                tcpService.SendData(cmd_send, 0, cmd_send.Length);

                timeDelay = 0;
                while (timeDelay < tcpService.TcpWait)
                {
                    if (tcpService.socketData.Buffer.Length > 0)
                    {
                        myLogger.Info(HexStringUtility.ByteArrayToHexString(tcpService.socketData.Buffer.Buffer));
                    }
                    if (tcpService.socketData.Buffer.Length >= CommandCommon.CMD_MIN_LENGTH)
                    {
                        byte[] re         = tcpService.socketData.Buffer.Buffer;
                        byte[] buffer_new = new byte[tcpService.socketData.Buffer.Length];
                        Array.Copy(re, buffer_new, tcpService.socketData.Buffer.Length);
                        string receiveHex = HexStringUtility.ByteArrayToHexString(buffer_new);
                        //string str = HexStringUtility.HexStringToStr(receiveHex);
                        waitRsp          = true;
                        result["Result"] = true;
                        if (receiveHex == BaseProtocol.DeviceOffline)
                        {
                            result["Message"] = "查询终端不在线";
                        }
                        else
                        {
                            result["Message"] = "终端在线返回结果:" + receiveHex;
                        }
                    }

                    if (waitRsp == true)
                    {
                        myLogger.Info("获取响应结束");
                        break;
                    }

                    if (tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CLOSED)
                    {
                        myLogger.Info("Socket关闭结束");
                        break;
                    }

                    Thread.Sleep(100);
                    timeDelay = timeDelay + 1;
                }

                tcpService.Close();

                if (waitRsp == false)
                {
                    result["Message"] = "等待设备回复超时!";
                }
            }
            catch (Exception exception)
            {
                result["Message"] = exception.Message;
                myLogger.Error(exception.Message);
            }

            return(result);
        }
예제 #23
0
        private JavaScriptObject OpenPump(HttpRequest request)
        {
            string DeviceNo              = request["DeviceNo"] ?? "";
            string SerialNumber          = request["SerialNumber"] ?? "";
            string UserNo                = request["UserNo"] ?? "";
            string EventTime             = request["EventTime"] ?? "";
            string StartTime             = request["StartTime"] ?? "";
            string StartResidualWater    = request["StartResidualWater"] ?? "";
            string StartResidualElectric = request["StartResidualElectric"] ?? "";
            string YearWaterUsed         = request["YearWaterUsed"] ?? "";
            string YearElectricUsed      = request["YearElectricUsed"] ?? "";
            string YearSurplus           = request["YearSurplus"] ?? "";
            string YearExploitation      = request["YearExploitation"] ?? "";

            JavaScriptObject result = new JavaScriptObject();

            result.Add("Result", false);
            result.Add("Message", "");

            try
            {
                Device device = DeviceModule.GetDeviceByFullDeviceNo(DeviceNo);
                if (device == null)
                {
                    result["Message"] = "设备长编号" + DeviceNo + "不存在!";
                    return(result);
                }

                CmdFromDtuOpenPump cmd = new CmdFromDtuOpenPump();
                cmd.AddressField          = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                cmd.StationType           = (byte)device.StationType;
                cmd.StationCode           = device.StationCode;
                cmd.UserNo                = UserNo;
                cmd.SerialNumber          = SerialNumber;
                cmd.StartTime             = DateTime.Parse(StartTime);
                cmd.StartResidualWater    = decimal.Parse(StartResidualWater);
                cmd.StartResidualElectric = decimal.Parse(StartResidualElectric);
                cmd.YearWaterUsed         = decimal.Parse(YearWaterUsed);
                cmd.YearElectricUsed      = decimal.Parse(YearElectricUsed);
                cmd.YearExploitation      = decimal.Parse(YearExploitation);
                cmd.YearSurplus           = decimal.Parse(YearSurplus);

                cmd.RawDataChar = cmd.WriteMsg();
                cmd.RawDataStr  = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                DeviceEvent deviceEvent = new DeviceEvent();
                DeviceEventModule.InitDeviceEvent(deviceEvent);
                deviceEvent.DeviceNo              = DeviceNo;
                deviceEvent.EventTime             = cmd.StartTime;
                deviceEvent.EventType             = "开泵上报";
                deviceEvent.UserNo                = cmd.UserNo;
                deviceEvent.SerialNumber          = cmd.SerialNumber;
                deviceEvent.StartTime             = cmd.StartTime;
                deviceEvent.StartResidualWater    = cmd.StartResidualWater;
                deviceEvent.StartResidualElectric = cmd.StartResidualElectric;
                deviceEvent.YearWaterUsed         = cmd.YearWaterUsed;
                deviceEvent.YearElectricUsed      = cmd.YearElectricUsed;
                deviceEvent.YearExploitation      = cmd.YearExploitation;
                deviceEvent.YearSurplus           = cmd.YearSurplus;
                deviceEvent.RawData               = cmd.RawDataStr;
                deviceEvent.DeviceTime            = cmd.StartTime;
                deviceEvent.Remark                = "开泵时间:" + deviceEvent.StartTime.ToString("yyyy-MM-dd HH:mm:ss") + ",卡号:" + deviceEvent.UserNo + ",卡剩余水量:" + deviceEvent.StartResidualWater + ",卡剩余电量:" + deviceEvent.StartResidualElectric + "";

                DeviceEventModule.AddDeviceEvent(deviceEvent);

                result["Result"] = true;
            }
            catch (Exception ex)
            {
                result["Message"] = "开泵上报保存出错!";
                myLogger.Error(ex.Message);
            }

            return(result);
        }
        public string ReadMsg()
        {
            if (UserDataBytes == null || UserDataBytes.Length == 0)
            {
                if (ShowLog)
                {
                    logHelper.Error("无信息,无法分析!");
                }
                return("无信息,无法分析!");
            }

            UserData = HexStringUtility.ByteArrayToHexString(UserDataBytes);

            try
            {
                SerialNumber = Convert.ToInt16(UserData.Substring(0, 4), 16);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取流水号出错" + " " + RawDataStr);
                }
                return("获取流水号出错");
            }

            try
            {
                SendTime = DateTime.ParseExact("20" + UserData.Substring(4, 12), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                if (ShowLog)
                {
                    logHelper.Error(ex.Message + Environment.NewLine + "获取发报时间出错" + " " + RawDataStr);
                }
                return("获取发报时间出错");
            }

            string Remain = UserData.Substring(16);

            string            msg           = "";
            List <Identifier> List_RTUParam = Identifier.analyse(Remain, AFN, out msg);

            if (msg == "")
            {
                if (List_RTUParam.Count == 1)
                {
                    if (List_RTUParam[0].GetKey() == (byte)Identifier_Standard._45)
                    {
                        Identifier_45 iden = (Identifier_45)List_RTUParam[0];
                        isUsed = iden.AlarmStateV[32 - (int)AlarmState._10] == '1';
                    }
                    else
                    {
                        msg = "数据体非法,参数关键字非法";
                    }
                }
                else
                {
                    msg = "数据体非法,参数超过1个";
                }
            }
            return(msg);
        }
예제 #25
0
        private ResMsg SendCmd(byte[] cmd_send)
        {
            ResMsg msg = new ResMsg(false, "");

            try
            {
                TcpCommunication tcpService = new TcpCommunication();
                int timeDelay = 0;
                //待socket准备好
                while (timeDelay < tcpService.TcpWait)
                {
                    if ((tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CONNECTED) ||
                        (tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CLOSED))
                    {
                        break;
                    }

                    Thread.Sleep(100);
                    timeDelay = timeDelay + 1;
                }
                if (tcpService.SOCKET_STATE != TcpCommunication.TCP_SocketState.SOCKET_CONNECTED)
                {
                    msg.Message = "与网关通讯失败!";
                    return(msg);
                }

                tcpService.SendData(cmd_send, 0, cmd_send.Length);

                bool waitRsp = false;
                timeDelay = 0;
                while (timeDelay < tcpService.TcpWait)
                {
                    if (tcpService.socketData.Buffer.Length >= CommandCommon.CMD_MIN_LENGTH)
                    {
                        byte[] re         = tcpService.socketData.Buffer.Buffer;
                        byte[] buffer_new = new byte[tcpService.socketData.Buffer.Length];
                        Array.Copy(re, buffer_new, tcpService.socketData.Buffer.Length);
                        waitRsp     = true;
                        msg.Result  = true;
                        msg.Message = HexStringUtility.ByteArrayToHexString(buffer_new);

                        myLogger.Info("收到数据:" + msg.Message);
                    }

                    if (waitRsp == true)
                    {
                        //myLogger.Info("获取响应结束");
                        break;
                    }

                    if (tcpService.SOCKET_STATE == TcpCommunication.TCP_SocketState.SOCKET_CLOSED)
                    {
                        //myLogger.Info("Socket关闭结束");
                        break;
                    }

                    Thread.Sleep(50);
                    timeDelay = timeDelay + 1;
                }
                tcpService.Close();
                if (waitRsp == false)
                {
                    msg.Message = "等待设备回复超时!";
                }
            }
            catch (Exception e)
            {
                myLogger.Info("异常信息为:" + e.StackTrace);
            }
            return(msg);
        }
 public string ReadMsg(byte[] bs)
 {
     return(ReadMsg(HexStringUtility.ByteArrayToHexString(bs)));
 }
예제 #27
0
        private void downloadApp()
        {
            if (sr == null)
            {
                return;
            }
            byte[] buffer = new byte[packetSize];
            int    read   = sr.Read(buffer, 0, packetSize);

            //MessageBox.Show("read====" + read);
            if (read > 0)
            {
                readCount += read;
                //还要更新进度条控件
                ValueEventArgs e = new ValueEventArgs();
                e.Value = read;
                downloadWorker.onValueChanged(e);
                byte[] sendBuffer;
                //port.sendProtocol(sendBuf, sendBuf.Length);
                if (isFirstSend == true)
                {
                    sendBuffer    = new byte[1 + packetSize];
                    sendBuffer[0] = fileType;
                    Array.Copy(buffer, 0, sendBuffer, 1, packetSize);
                }
                else
                {
                    //Debug.WriteLine("the read is \r\n" + read);
                    sendBuffer = new byte[read];
                    Array.Copy(buffer, 0, sendBuffer, 0, read);
                    // sendBuffer = buffer;
                }
                string           DeviceNo = DeviceModule.GetFullDeviceNoByID(device.Id);
                CmdToDtuSendFile cmd      = new CmdToDtuSendFile();
                cmd.AddressField = DeviceNo.Substring(0, 12) + Convert.ToInt32(DeviceNo.Substring(12, 3)).ToString("X").PadLeft(2, '0');
                cmd.StationType  = (byte)device.StationType;
                cmd.StationCode  = device.StationType == 2 ? device.StationCode : 0;
                cmd.Sum          = (short)count;
                cmd.Curr         = (short)(index + 1);
                cmd.Content      = sendBuffer;
                cmd.RawDataChar  = cmd.WriteMsg();
                cmd.RawDataStr   = HexStringUtility.ByteArrayToHexString(cmd.RawDataChar);

                byte[] cmd_send = cmd.RawDataChar;
                client.send(cmd_send, 0, cmd_send.Length);
                index++;
                this.timer1.Start();
                this.currentFrameLabel.Text = index.ToString();
            }
            else
            {
                readCount = 0;
                sr.Close();
                sr = null;

                MessageBox.Show("下载成功!");
                //将申请的资源释放掉
                this.fileTxt.Text       = "";
                this.progressBar1.Value = 0;
                count = 0;
                index = 0;
                this.totalFrameLabel.Text   = "0";
                this.currentFrameLabel.Text = "0";
                this.timer1.Stop();
                this.downloadBtn.Enabled = true;
            }
        }