public void Start() { try { var ip = IPAddress.Parse(BasePublic.ServerIP); ; lis = new TcpListener(ip, 843); lis.Start(); } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now, "启动843端口监听失败!", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Adobe, msg); return; } var msg2 = string.Format("{0} {1} ", DateTime.Now.ToString(BasePublic.strTimeFormat), "启动843端口成功!"); Console.WriteLine(string.Format(msg2)); while (true) { //Console.Write("**********"); lis.BeginAcceptTcpClient(asc, lis); Thread.Sleep(1); } }
/// <summary> /// 查询报警短信信息 /// </summary> public void SendToPhone() { var messagrlist = BLLFactory <B_SYS_MessegeSend> .Instance.Find("(1=1) and Status='1'"); if (messagrlist == null || messagrlist.Count == 0) { } else { foreach (var item in messagrlist) { try { fSmsBaseClass.SendDTU(item.SendTo, 0, item.Title + item.Content); item.Status = 2; BLLFactory <B_SYS_MessegeSend> .Instance.Update(item, item.ID); Thread.Sleep(5000); } catch (Exception e) { var msg = string.Format("{0} <{1}> {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), item.ID + "短信发送失败!", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Msg, msg); } } } }
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { var error = e.ExceptionObject as Exception; BasePublic.ExceptionDeal(BaseEnum.Main, error.Message); Console.WriteLine("应用程序出错,5s后关闭"); Thread.Sleep(5000); Environment.Exit(-1); }
/// <summary> /// 启动函数 /// </summary> public void Start() { fSmsBaseClass = new SmsBaseClass(); try { fSmsBaseClass.OpenPort(ComPort); } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), ComPort + "串口打开失败!", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Msg, msg); } timerSend = new Timer(SendSmsPeriod); timerSend.Elapsed += TimerSend_Elapsed; timerSend.Start(); }
/// <summary> /// 启动服务 /// </summary> public void StartTCPServer() { try { Console.WriteLine("{0}", "读取socket配置信息....."); server = TxStart.startServer(BasePublic.ServerIP, BasePublic.ServerPort); Console.WriteLine("socket服务器{0}{1}", server.Ip, "启动中....."); server.AcceptString += acceptString; server.AcceptByte += acceptBytes; server.Connect += connect; server.dateSuccess += dateSuccess; server.Disconnection += disconnection; server.EngineClose += engineClose; server.EngineLost += engineLost; server.StartEngine(); Console.WriteLine("socket服务器{0}{1}", server.Ip + ":" + server.Port, "启动成功....."); //非电量线程 Thread thread = new Thread(SendNotEle); thread.Start(); //用电量线程 Thread threadEle = new Thread(SendEle); threadEle.Start(); //能耗线程 Thread threadEnergy = new Thread(SendEnergy); threadEnergy.Start(); while (true) { Console.WriteLine("...."); Thread.Sleep(1000); } } catch (Exception e) { var msg = string.Format("{0} Socket<{1}:{2}>{3} {4}", DateTime.Now.ToString(BasePublic.strTimeFormat), BasePublic.ServerIP, BasePublic.ServerPort, "启动失败", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Socket, msg); } }
/// <summary> /// 大数据写入数据库 /// </summary> /// <param name="con"></param> /// <param name="destinationtablename"></param> private void BulkWriteToServer(SqlConnection con, string tableName, DataTable dt) { //lock (BasePublic.lockerConfig) //{ try { if (con.State != ConnectionState.Open) { con.Open(); } var sqlBulkCopy = new SqlBulkCopy(con, SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.Default, null); //一次批量的插入的数据量 sqlBulkCopy.BatchSize = 1000; //超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除 sqlBulkCopy.BulkCopyTimeout = 60; //設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。 sqlBulkCopy.NotifyAfter = 10000; sqlBulkCopy.SqlRowsCopied += OnSqlRowsCopied; //映射关系 //topbranddtcopy.ColumnMappings.Add("", ""); CreateMapping(sqlBulkCopy, dt); sqlBulkCopy.DestinationTableName = tableName; sqlBulkCopy.WriteToServer(dt); } catch (Exception e) { var msg = string.Format("{0} {1} {2} {3}", dt, tableName, "批量插入数据库失败", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); } //} }
/// <summary> /// 发送能源数据到客户端 /// </summary> private void SendToClient_Energy(object type) { //Thread.Sleep(SendPeriod); if (server.ClientAll != null && server.ClientAll.Count == 0) { var msg = "服务端无连接,不发送"; Console.WriteLine(msg); } var lst = new List <M_BS_Realdata_Spt>(); try { lst = BLLFactory <B_BS_Realdata_Spt> .Instance.GetEnergyRecordList(DateTime.Now); if (lst == null) { return; } } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), "查询实时数据spt出错", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Socket, msg); return; } var dt = BaseFunction.CreateTable("TagID,TagValue,TagName,TagStatus,RealValue,RealTime"); DataRow dr = null; double value = 0; var status = 0; var str = ""; foreach (var item in lst) { var model_Tag = (from li in BasePublic.lstTagsEnergy where li.TagCode == item.TagID select li).FirstOrDefault(); //查找该位号的缓存数据 var mtRow = (from li in mtTable where li.Key == item.TagID select li).FirstOrDefault(); if (model_Tag == null) { continue; } //if (mtRow.Count == 0) //{ // mtRow.StartTime = DateTime.Now; //} //mtRow.Count += 1; //mtRow.NoDataCount = 0; //if (mtRow.Count >= BasePublic.OneDataCount) //{ // mtRow.Value = BasePublic.OneDataCount; // mtRow.Count = 0; // //mtRow.AlarmCount = 0; //} dr = dt.NewRow(); dr["RealTime"] = DateTime.Now.ToString(BasePublic.strTimeFormat); dr["RealValue"] = item.RealValue; dr["TagID"] = item.TagID; dr["TagName"] = model_Tag.TagName; str = ""; status = 0; var IsAlarm = false; if (model_Tag.IsAlarm) { // M_BS_TagDefine model_PreTags = // (from li in BasePublic.lstTagsAll where li.ID == model_Tag.PreTags select li).FirstOrDefault(); // if (model_PreTags == null || model_PreTags.PreTags.Trim().Length == 0) // { // IsAlarm = true; // } // else // { // var model_PreValue = // (from li in lst where li.TagID == model_PreTags.ID select li).FirstOrDefault(); // if (model_PreValue.RealValue > 0) // { // IsAlarm = true; // } // } if (IsAlarm) { if (item.RealValue > model_Tag.TagHH) { status = 1; str = string.Format("参数值({1})过高,正常值{2}({3}至{4})", model_Tag.TagName, item.RealValue, model_Tag.TagVal, model_Tag.TagLL, model_Tag.TagHH); } if (item.RealValue < model_Tag.TagLL) { status = 1; str = string.Format("参数值({1})过低,正常值{2}({3}至{4})", model_Tag.TagName, item.RealValue, model_Tag.TagVal, model_Tag.TagLL, model_Tag.TagHH); } mtRow.AlarmCount += 1; mtRow.Status = status; mtRow.Msg = str; if (mtRow.AlarmCount >= 10) { try { } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), "转化实时数据出错", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Socket, msg); } } } } //dr["TagStatus"] = status; //dr["TagValue"] = str; //dt.Rows.Add(dr); dt.Rows.Add(dr); } #region 发送到客户端 //string strJson = BaseFunction.DataTable2Json(dt); var strJson = BaseFunction.DataTableToJson(dt); var byteLen = Encoding.Default.GetByteCount(strJson); var strMsg = string.Format("\n\n{0}向端口发送【能源】数据:" + "*****************************", DateTime.Now.ToString(BasePublic.strTimeFormat)); if (strJson == null || strJson.Trim().Length == 0) { strMsg += string.Format("\n{0}字符串长度为0,数据不发送", DateTime.Now.ToString(BasePublic.strTimeFormat)); return; } if (server.ClientAll == null) { strMsg += string.Format("\n{0}", "无客户端连接,数据未发送"); Console.WriteLine(strMsg); return; } strMsg += string.Format("\n允许最大在线人数:{0}\n当前连接数为:{1}", server.ClientMax, server.ClientAll.Count); foreach (var item in server.ClientAll) { if (!server.clientCheck(item)) { strMsg += string.Format("\n客户端{0}{1}", item.Address + ":" + item.Port, "不在线"); break; } Console.WriteLine(strMsg); var sendData = Encoding.UTF8.GetBytes(strJson); var aaa = sendData[sendData.Length - 1]; if (strJson == null || strJson.Trim(']').Length < 1) { strMsg += string.Format("\n{0}字符串长度为0,客户端{1}{2}", DateTime.Now.ToString(BasePublic.strTimeFormat), item.Address + ":" + item.Port, "发送信息不成功"); return; } strMsg += string.Format("\n{0}客户端{1}{2}", DateTime.Now.ToString(BasePublic.strTimeFormat), item.Address + ":" + item.Port, "发送信息成功"); Console.WriteLine(strMsg); server.sendMessage(item, strJson); } #endregion }
/// <summary> /// 将实时数据进行处理 /// </summary> /// <param name="lst"></param> /// <returns></returns> private DataTable GetSendTable(List <M_BS_Realdata_Spt> lst, string type = "0") { var dt = BaseFunction.CreateTable("TagID,TagValue,TagName,TagStatus,RealValue,RealTime"); DataRow dr = null; double value = 0; var status = 0; var str = ""; foreach (var item in lst) { M_BS_TagDefine model_Tag = null; MTKeyValue mtRow = null; if (type == "0") { model_Tag = (from li in BasePublic.lstTagsAll where li.ID == item.TagID select li).FirstOrDefault(); //查找该位号的缓存数据 mtRow = (from li in mtTable where li.Key == item.TagID select li).FirstOrDefault(); } else { model_Tag = (from li in BasePublic.lstTagsAllNQ where li.ID == item.TagID select li).FirstOrDefault(); //查找该位号的缓存数据 mtRow = (from li in mtTableNQ where li.Key == item.TagID select li).FirstOrDefault(); } if (mtRow == null || model_Tag == null) { continue; } if (mtRow.Count == 0) { mtRow.StartTime = DateTime.Now; } mtRow.Count += 1; mtRow.NoDataCount = 0; if (mtRow.Count >= BasePublic.OneDataCount) { mtRow.Value = BasePublic.OneDataCount; mtRow.Count = 0; //mtRow.AlarmCount = 0; } dr = dt.NewRow(); dr["RealTime"] = DateTime.Now.ToString(BasePublic.strTimeFormat); dr["RealValue"] = item.RealValue; dr["TagID"] = item.TagID; dr["TagName"] = model_Tag.TagName; str = ""; status = 0; var IsAlarm = false; if (model_Tag.IsAlarm) { var model_PreTags = (from li in BasePublic.lstTagsAll where li.ID == model_Tag.PreTags select li).FirstOrDefault(); if (model_PreTags == null || model_PreTags.PreTags.Trim().Length == 0) { IsAlarm = true; } else { var model_PreValue = (from li in lst where li.TagID == model_PreTags.ID select li).FirstOrDefault(); if (model_PreValue.RealValue > 0) { IsAlarm = true; } } if (IsAlarm) { if (item.RealValue > model_Tag.TagHH) { status = 1; str = string.Format("参数值({1})过高,正常值{2}({3}至{4})", model_Tag.TagName, item.RealValue, model_Tag.TagVal, model_Tag.TagLL, model_Tag.TagHH); } if (item.RealValue < model_Tag.TagLL) { status = 1; str = string.Format("参数值({1})过低,正常值{2}({3}至{4})", model_Tag.TagName, item.RealValue, model_Tag.TagVal, model_Tag.TagLL, model_Tag.TagHH); } mtRow.AlarmCount += 1; mtRow.Status = status; mtRow.Msg = str; if (mtRow.AlarmCount >= 10) { try { } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), "转化实时数据出错", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Socket, msg); continue; } } } } dr["TagStatus"] = status; dr["TagValue"] = str; dt.Rows.Add(dr); } return(dt); }
/// <summary> /// 发送至客户端 /// </summary> private void SendToClient(object ob) { object[] obs = ob as object[]; string type = ""; M_MT_TagDefine info = null; string strIds = ""; if (obs == null) { return; } if (obs.Length == 1) { type = obs[0].ToString(); } if (obs.Length == 2) { type = obs[0].ToString(); info = obs[1] as M_MT_TagDefine; } lock (BasePublic.lockerConfig) { if (server.ClientAll != null && server.ClientAll.Count == 0) { var msg = "服务端无连接,不发送"; Console.WriteLine(msg); } var lst = new List <M_BS_Realdata_Spt>(); try { lst = BLLFactory <B_BS_Realdata_Spt> .Instance.GetNewList(type, info); if (lst == null) { return; } if (type.ToString() != "0") { //lst=(from li in lst where li.TagCode=="Epi" select li).ToList(); } } catch (Exception e) { var msg = string.Format("{0} {1} {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), "查询实时数据spt出错", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Socket, msg); return; } DataTable dt = GetSendTable(lst, type); #region 发送到客户端 //string strJson = BaseFunction.DataTable2Json(dt); var strJson = BaseFunction.DataTableToJson(dt); var byteLen = Encoding.Default.GetByteCount(strJson); var strMsg = string.Format("\n\n{0}向端口发送【非电量】数据:" + "*****************************", DateTime.Now.ToString(BasePublic.strTimeFormat)); if (type != "0") { strMsg = string.Format("\n\n{0}向端口发送【电量】数据:" + "*****************************", DateTime.Now.ToString(BasePublic.strTimeFormat)); } if (strJson == null || strJson.Trim().Length == 0) { strMsg += string.Format("\n{0}字符串长度为0,数据不发送", DateTime.Now.ToString(BasePublic.strTimeFormat)); return; } if (server.ClientAll == null) { strMsg += string.Format("\n{0}", "无客户端连接,数据未发送"); Console.WriteLine(strMsg); return; } strMsg += string.Format("\n允许最大在线人数:{0}\n当前连接数为:{1}", server.ClientMax, server.ClientAll.Count); foreach (var item in server.ClientAll) { if (!server.clientCheck(item)) { strMsg += string.Format("\n客户端{0}{1}", item.Address + ":" + item.Port, "不在线"); break; } Console.WriteLine(strMsg); var sendData = Encoding.UTF8.GetBytes(strJson); var aaa = sendData[sendData.Length - 1]; if (strJson == null || strJson.Trim(']').Length < 1) { strMsg += string.Format("\n{0}字符串长度为0,客户端{1}{2}", DateTime.Now.ToString(BasePublic.strTimeFormat), item.Address + ":" + item.Port, "发送信息不成功"); return; } strMsg += string.Format("\n{0}客户端{1}{2}", DateTime.Now.ToString(BasePublic.strTimeFormat), item.Address + ":" + item.Port, "发送信息成功"); Console.WriteLine(strMsg); server.sendMessage(item, strJson); } #endregion } }
/// <summary> /// 单个PLC取数据 /// </summary> /// <param name="item"></param> private void OneDeal(M_MT_TagDefine info) { dtS = DateTime.Now; Thread.Sleep(1); if (info == null) { return; } #region 创建socket连接 var socketIP = info.TagAddr; if (string.IsNullOrEmpty(socketIP)) { return; } var arrSendOrder = info.SendOrder.Split(','); var barrySendOrder = new byte[arrSendOrder.Length]; for (var i = 0; i < arrSendOrder.Length; i++) { barrySendOrder[i] = Convert.ToByte(arrSendOrder[i], 16); var a = string.Format("0x{0:X}", barrySendOrder[i]); } var threadID = Thread.CurrentThread.ManagedThreadId; //获取当前线程的ID标识 var dt = DateTime.Now; var Port = 502; //访问的端口号 IPAddress IP = null; try { IP = IPAddress.Parse(socketIP); } catch (Exception e) { var msg = string.Format("{0} {1} {2} {3}", dt, info.ID + "转换地址时出错", threadID, e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); return; } var ipe = new IPEndPoint(IP, Port); //把ip和端口转化为IPEndPoint的实例 var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建socket实例 socket.SendTimeout = 1000; socket.ReceiveTimeout = 1000; socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.AcceptConnection, true); #endregion //socket连接建立及连接异常处理 try { if (!socket.Connected) { socket.Connect(ipe); } } catch (Exception e) { var msg = string.Format("{0} 模块<{1}>连接失败,{2},{3}", dt, info.ID, threadID, e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); socket.Close(); socket.Dispose(); return; } //Console.WriteLine(string.Format("{0} 模块<{1}({2})>连接成功,{3}", dt, info.TagName, info.ID, threadID)); try { socket.Send(barrySendOrder, barrySendOrder.Length, 0); //modbusTCP套接字命令发送 } catch (Exception e) { var msg = string.Format("{0} 模块<{1}>通讯失败,{2},{3}", dt, info.ID, threadID, e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); socket.Close(); socket.Dispose(); return; } // Console.WriteLine(string.Format("{0} 模块<{1}({2})>通讯成功,{3}", dt, info.TagName, info.ID, threadID)); int n = barrySendOrder[11]; var m = 10 + 2 * n - 1; var recData = new byte[m]; try { socket.Receive(recData, recData.Length, 0); //套接字读取 //校验前缀 / 地址和数据长度 var result_tag = true; for (var i = 6; i < 8; i++) { result_tag = result_tag && (recData[i] == Convert.ToByte(arrSendOrder[i], 16)); } if (result_tag && n == recData[8] / 2) { recData = recData.Skip(9).ToArray(); } else { var msg = string.Format("{0} 模块<{1}>校验失败,{2}", dt, info.ID, threadID); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); return; } } catch (Exception e) { var msg = string.Format("{0} 模块<{1}>接收失败,{2},{3}", dt, info.ID, threadID, e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Collect, msg); socket.Close(); socket.Dispose(); return; } //Console.WriteLine(string.Format("{0} 模块<{1}({2})>接收成功,{3}", dt, info.TagName, info.ID, threadID)); //string tttt = String.Join(",", recData); //string st = DataConvert.ByteArrayToHexStr(recData); var dtStore = new DataTable(); lock (BasePublic.lockerConfig) { #region 数据转化到datatable var dtTags = dsTags.Tables["T_BS_TagDefine"]; DataTableHelper.CreateDataTable(ref dtStore, "T_BS_Realdata"); var dtSpt = dsRealdata_Spt.Tables["T_BS_Realdata_Spt"]; //CreateDataTable(ref dtSpt); var dtAlarm = new DataTable(); DataTableHelper.CreateDataTable(ref dtAlarm, "T_EP_EquipWarning"); var fs = new object[n / 2]; var analysis_index = 0; //recData第一个数据的0索引位置 for (var i = 0; i < info.lstTags.Count; i++) { var current_analysis = info.lstTags.Find(delegate(M_BS_TagDefine temp) { return(temp.DataIndex == i); }); #region 数据解析 /*0orNull default(float) * 1 char * 2 int16 * 3 int32 * 4 int64 * 5 uint16 * 6 uint32 * 7 uint64 * 8 float * 9 double * */ #region 数据解析(过期) //switch (current_analysis.DataType) //{ // case 1://char // { // byte[] aa = new byte[sizeof(char)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(char)); // aa=aa.Reverse().ToArray(); // fs[i] = BitConverter.ToChar(aa, 0); // analysis_index += sizeof(char); // } // break; // case 2://int16 // { // byte[] aa = new byte[sizeof(Int16)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(Int16)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToInt16(aa, 0); // analysis_index += sizeof(Int16); // } // break; // case 3://int32 // { // byte[] aa = new byte[sizeof(Int32)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(Int32)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToInt32(aa, 0); // analysis_index += sizeof(Int32); // } // break; // case 4://int64 // { // byte[] aa = new byte[sizeof(Int64)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(Int64)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToInt64(aa, 0); // analysis_index += sizeof(Int64); // } // break; // case 5://uint16 // { // byte[] aa = new byte[sizeof( UInt16)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt16)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToUInt16(aa, 0); // analysis_index += sizeof(UInt16); // } // break; // case 6://uint32 // { // byte[] aa = new byte[sizeof(UInt32)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt32)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToUInt32(aa, 0); // analysis_index += sizeof(UInt32); // } // break; // case 7://uint64 // { // byte[] aa = new byte[sizeof(Int64)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(Int64)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToUInt64(aa, 0); // analysis_index += sizeof(Int64); // } // break; // case 8://float // { // byte[] aa = new byte[sizeof(float)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(float)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToSingle(aa, 0); // analysis_index += sizeof(float); // } // break; // case 9: // { // byte[] aa = new byte[sizeof(double)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(double)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToDouble(aa, 0); // analysis_index += sizeof(double); // } // break; // default://float // { // byte[] aa = new byte[sizeof(float)]; // Array.Copy(recData, analysis_index, aa, 0, sizeof(float)); // aa = aa.Reverse().ToArray(); // fs[i] = BitConverter.ToSingle(aa, 0); // analysis_index += sizeof(float); // } // break; //} #endregion //正确的转换顺序 #region 数据解析 switch (current_analysis.DataType) { case 1: //char { var aa = new byte[sizeof(char)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(char)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToChar(aa, 0); analysis_index += sizeof(char); } break; case 2: //int16 { var aa = new byte[sizeof(Int16)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(Int16)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToInt16(aa, 0); analysis_index += sizeof(Int16); } break; case 3: //int32 { var aa = new byte[sizeof(Int32)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(Int32)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToInt32(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(Int32); } break; case 4: //int64 { var aa = new byte[sizeof(Int64)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(Int64)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToInt64(new[] { aa[4], aa[5], aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(Int64); } break; case 5: //uint16 { var aa = new byte[sizeof(UInt16)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt16)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToUInt16(aa, 0); analysis_index += sizeof(UInt16); } break; case 6: //uint32 { var aa = new byte[sizeof(UInt32)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt32)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToUInt32(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(UInt32); } break; case 7: //uint64 { var aa = new byte[sizeof(Int64)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(Int64)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToUInt64(new[] { aa[4], aa[5], aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(Int64); } break; case 8: //float { var aa = new byte[sizeof(float)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(float)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToSingle(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(float); } break; case 9: { //byte[] aa = new byte[sizeof(double)]; //Array.Copy(recData, analysis_index, aa, 0, sizeof(double)); //aa = aa.Reverse().ToArray(); //fs[i] = BitConverter.ToDouble(new byte[] { aa[6],aa[7],aa[4],aa[5],aa[2], aa[3], aa[0], aa[1] }, 0); //analysis_index += sizeof(double); var aa = new byte[sizeof(UInt32)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt32)); aa = aa.Reverse().ToArray(); double dd = BitConverter.ToUInt32(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(UInt32); var bb = new byte[sizeof(UInt32)]; Array.Copy(recData, analysis_index, bb, 0, sizeof(UInt32)); bb = bb.Reverse().ToArray(); double de = BitConverter.ToUInt32(new[] { bb[2], bb[3], bb[0], bb[1] }, 0); analysis_index += sizeof(UInt32); var df = (dd * Math.Pow(10, 6) + de / 100) / 100; fs[i] = df; } break; case 10: { //byte[] aa = new byte[sizeof(double)]; //Array.Copy(recData, analysis_index, aa, 0, sizeof(double)); //aa = aa.Reverse().ToArray(); //fs[i] = BitConverter.ToDouble(new byte[] { aa[6],aa[7],aa[4],aa[5],aa[2], aa[3], aa[0], aa[1] }, 0); //analysis_index += sizeof(double); var aa = new byte[sizeof(UInt32)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(UInt32)); aa = aa.Reverse().ToArray(); double dd = BitConverter.ToSingle(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(UInt32); var bb = new byte[sizeof(UInt32)]; Array.Copy(recData, analysis_index, bb, 0, sizeof(UInt32)); bb = bb.Reverse().ToArray(); double de = BitConverter.ToSingle(new[] { bb[2], bb[3], bb[0], bb[1] }, 0); analysis_index += sizeof(UInt32); var df = (dd * Math.Pow(10, 2) + de); fs[i] = df; } break; default: //float { var aa = new byte[sizeof(float)]; Array.Copy(recData, analysis_index, aa, 0, sizeof(float)); aa = aa.Reverse().ToArray(); fs[i] = BitConverter.ToSingle(new[] { aa[2], aa[3], aa[0], aa[1] }, 0); analysis_index += sizeof(float); } break; } #endregion } #endregion #region 数据操作 foreach (var model in info.lstTags) { var drTag = dtTags.Select(string.Format("ID='{0}'", model.ID)).FirstOrDefault(); if (drTag != null) { var drSpt = dtSpt.Select(string.Format("TagID='{0}'", model.ID)).FirstOrDefault(); var drStore = dtStore.NewRow(); var dValue = Convert.ToDouble(fs[model.DataIndex]); drStore["TagID"] = model.ID; decimal dValue3 = 0; decimal.TryParse(dValue.ToString("#.000"), out dValue3); if (model.CompensateRatio > 0) { dValue3 = dValue3 * model.CompensateRatio; } dValue3 = (Math.Abs(dValue3) > (decimal)(Math.Pow(10, 15) - 1)) ? 0 : dValue3; lock (BasePublic.lockerConfig) { drStore["RealValue"] = dValue3; drStore["RealTime"] = dtS.ToString(BasePublic.strTimeFormat); drStore["RecordTime"] = dtS.ToString(BasePublic.strTimeFormat); } //dtSpt.Rows.Add(drSpt); var period = 0; if (drTag["StorePeriod"] != null) { int.TryParse(drTag["StorePeriod"].ToString(), out period); } DateTime dt00; if (!DateTime.TryParse(drTag["LastTime"].ToString(), out dt00)) { dt00 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00")); } var dt11 = dtS.AddSeconds(-period); if (dt00 <= dt11) { dtStore.Rows.Add(drStore); lock (BasePublic.lockerConfig) { drTag["LastTime"] = dtS; drTag.AcceptChanges(); } } try { drSpt["RealTime"] = dtS.ToString(BasePublic.strTimeFormat); drSpt["RealValue"] = dValue3; } catch (Exception ex) { } } #endregion } //VerfyAlarm(BasePublic.lstTagsAll, dtStore, mtTemp, ref dtAlarm); #endregion } UpdateToServer(); InsertToServer(dtStore, "T_BS_Realdata"); //manualReset_Config.Set(); }
/// <summary> /// 查询报警短信信息 /// </summary> public void SendMail() { var mailFromServerPath = ""; var mailFrom = ""; var mailFromPassword = ""; if (ConfigurationManager.AppSettings.AllKeys.Contains("MailFromServerPath")) { mailFromServerPath = ConfigurationManager.AppSettings["MailFromServerPath"]; } else { return; } if (ConfigurationManager.AppSettings.AllKeys.Contains("MailFrom")) { mailFrom = ConfigurationManager.AppSettings["MailFrom"]; } else { return; } if (ConfigurationManager.AppSettings.AllKeys.Contains("MailFromPassword")) { mailFromPassword = ConfigurationManager.AppSettings["MailFromPassword"]; } else { return; } var exceplist = BLLFactory <B_EP_Exceptions> .Instance.GetExceptionsUnSended(); if (exceplist == null || exceplist.Count == 0) { } else { var info = new MailInfo(); var smtpBaseClass = new SmtpBaseClass(); //找出有多少个收件人 var emails = (from u in exceplist select u.Email).Distinct().ToList(); foreach (var email in emails) { var exceps = exceplist.Where(u => u.Email == email).ToList(); var subject = "用量异常"; var body = new StringBuilder(); var idList = (from u in exceplist select u.ID).ToList(); var ids = string.Join(",", idList); body.AppendLine("以下为设备用量异常,请及时处理!"); //创建表格 body.AppendLine("<!DOCTYPE html>"); body.AppendLine(" <html>"); body.AppendLine( "<head>\n\t<style>\n\t\tbody,td{font:9pt 宋体}\n\t\t.b1{background:#ffffff;color:#000000;font-weight:bold;FONT-SIZE: 12pt}\n\t\t.b0{color:#000000}\n\t\t.TDClass2{background:#ffffff;color:#000000;BORDER-BOTTOM: #ccccff 1px solid}\n\t\t.TDClass3{background:#ccccff;color:#000000;width:100px;height:25px}\n\t</style>\n</head>"); body.AppendLine(" <body>"); body.AppendLine("<table cellSpacing=0 cellPadding=0 border=\"1\">"); body.AppendLine(" <tr>"); body.AppendLine(" <th width=\"300\">Define定义</th> "); body.AppendLine(" <th width=\"300\">Meaure度量</th> "); body.AppendLine(" <th width=\"100\">Analyze分析</th>"); body.AppendLine(" <th width=\"100\">Improve改善</th> "); body.AppendLine(" <th width=\"100\">Contral控制</th> "); body.AppendLine(" </tr>"); foreach (var item in exceps) { body.AppendLine(" <tr>"); body.AppendLine(" <td>" + item.Define + "</td> "); body.AppendLine(" <td>" + item.Measue + "</td> "); body.AppendLine(" <td> </td>"); body.AppendLine(" <td> </td> "); body.AppendLine(" <td> </td> "); body.AppendLine(" </tr>"); } body.AppendLine("</table>"); body.AppendLine(" </html>"); body.AppendLine(" </body>"); try { info = new MailInfo(); info.MailFromServerPath = mailFromServerPath; info.MailFrom = mailFrom; info.MailFromPassword = mailFromPassword; info.MailTo = email; info.MailSubject = subject; info.MailBody = body.ToString(); var result = smtpBaseClass.SendMail(info); BLLFactory <B_EP_Exceptions> .Instance.UpdateExceptionState(ids, result); Thread.Sleep(5000); } catch (Exception e) { var msg = string.Format("{0} <{1}> {2}", DateTime.Now.ToString(BasePublic.strTimeFormat), email + "邮件发送失败!", e.Message); Console.WriteLine(string.Format(msg)); BasePublic.ExceptionDeal(BaseEnum.Msg, msg); } } } }