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; }
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(""); }
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); }
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()); }
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()); }
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()); }
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); }
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(""); }
//上传文件 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(""); }
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); } }
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); }
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); }
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); }
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))); }
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; } }