Example #1
0
        /// <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);
                    }
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
 /// <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();
 }
Example #5
0
        /// <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);
            }
        }
Example #6
0
        /// <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);
            }
            //}
        }
Example #7
0
        /// <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
        }
Example #8
0
        /// <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);
        }
Example #9
0
        /// <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
            }
        }
Example #10
0
        /// <summary>
        ///     入口函数
        /// </summary>
        public static void Main()
        {
            //应用程序出错处理,调试时关闭
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            BasePublic.Start();
            Thread.Sleep(4000);

            #region 进程及线程控制

            var processes = Process.GetProcesses();
            //获取当前进程名
            var proName = Process.GetCurrentProcess().ProcessName;

            var a = (from li in processes where li.ProcessName == proName select li).Count();

            if (a > 1)
            {
                Console.WriteLine("程序已运行");
                return;
            }

            #region 关闭SocketServer未正常关闭的线程

            var processSockets =
                (from li in processes where li.ProcessName.Contains("SocketServer") select li).ToList();
            foreach (var item in processSockets)
            {
                Console.WriteLine(string.Format("上次遗留Socket进程未关闭"));
                try
                {
                    item.Kill();
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
                Console.WriteLine(string.Format("Socket进程关闭成功"));
                Thread.Sleep(1000);
            }

            #endregion

            #endregion

            #region 读取配置文件及打开相应线程

            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsCollect"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsCollect"], out isCollect);
            }
            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsSocket"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsSocket"], out isSocket);
            }
            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsAlarmSys"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsAlarmSys"], out isAlarmSys);
            }
            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsListenAdobe"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsListenAdobe"], out isListenAdobe);
            }
            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsListenExcep"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsListenExcep"], out isListenExcep);
            }
            if (ConfigurationManager.AppSettings.AllKeys.Contains("IsNQ"))
            {
                int.TryParse(ConfigurationManager.AppSettings["IsNQ"], out isNQ);
            }

            if (isNQ == 1)
            {
                var threadListenExcep = new Thread(CreateCollect_NQ);
                threadListenExcep.Start();
            }
            #endregion
        }
Example #11
0
        /// <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();
        }
Example #12
0
        /// <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);
                    }
                }
            }
        }