Example #1
0
        private void DeviceControlCallBack(Socket socket, string json)
        {
            C_To_S_Data <CSDataStandard.Transfer.DeviceControl> receiveObj = Utility.JsonHelper.JsonDeserialize <C_To_S_Data <CSDataStandard.Transfer.DeviceControl> >(json);

            //获取所有Org
            Clazz.Config.XML_Org org = SysConfig.orgConfig.GetOrgByOrgId(receiveObj.OrgId);
            if (org == null)  //判断Org是否存在
            {
                string msg = "OrgId:" + receiveObj.OrgId + "不存在";
                LogMg.AddError(msg);
                lb_msg.Items.Add(msg);
            }
            else
            {
                try
                {
                    SWSDataContext  db          = new SWSDataContext(ServerSocketHelper.GetConnection(org.DBName));
                    string          stationName = "未知的客户端";
                    country_station station     = db.country_station.SingleOrDefault(c => c.id == receiveObj.StationId);
                    if (station != null)
                    {
                        stationName = station.name;
                    }

                    saveData(db, receiveObj, stationName);

                    sendData(db, socket, stationName, receiveObj.StationId);
                }
                catch (Exception ex)
                {
                    LogMg.AddError(ex);
                    DEBUG.MsgBox(ex.ToString());
                }
            }
        }
Example #2
0
        /// <summary>
        /// 获取所有的Org
        /// </summary>
        /// <returns></returns>
        private List <Clazz.Config.XML_Org> GetAllOrg()
        {
            List <Clazz.Config.XML_Org> list = new List <Clazz.Config.XML_Org>();

            try
            {
                XmlNodeList xnl = Utility.XmlHelper.GetXmlNodeListByXpath(filePath, "/Config/Orgs/Org");
                foreach (XmlNode item in xnl)
                {
                    XmlElement           xe  = (XmlElement)item;
                    Clazz.Config.XML_Org org = new Clazz.Config.XML_Org();
                    org.OrgId       = xe.GetAttribute("OrgId");
                    org.Name        = xe.GetAttribute("Name");
                    org.DBName      = xe.GetAttribute("DBName");
                    org.gdServerCfg = xe.GetAttribute("gdServerCfg");
                    list.Add(org);
                }
            }
            catch (Exception e)
            {
                LogMg.AddError(e);
                DEBUG.MsgBox(e.ToString());
            }
            return(list);
        }
Example #3
0
 /// <summary>
 /// 根据orgId返回Org.XML中的对象    如果不存在则返回null
 /// </summary>
 /// <param name="orgId"></param>
 /// <returns></returns>
 public Clazz.Config.XML_Org GetOrgByOrgId(string orgId)
 {
     Clazz.Config.XML_Org org = null;
     try
     {
         org = Orgs.SingleOrDefault(c => c.OrgId == orgId);
     }
     catch (Exception e)
     {
         LogMg.AddError(e);
         DEBUG.MsgBox(e.ToString());
     }
     return(org);
 }
Example #4
0
 /// <summary>
 /// 心跳数据处理
 /// </summary>
 /// <param name="socket"></param>
 /// <param name="pack"></param>
 public static bool HeartbeatDataHandler(Socket socket)
 {
     try
     {
         //对心跳做一个回应
         ZG_DTU.Send(socket, new byte[1], 0, ZG_DTU.HEARTBEAT_DATA);
         return(true);
     }
     catch (Exception ex)
     {
         LogMg.AddError(ex);
         DEBUG.MsgBox(ex.ToString());
         return(false);
     }
 }
Example #5
0
        private static void ExecuteGD透传Order(object state)
        {
            GD_Station     gd_station = (GD_Station)state;
            List <XML_Org> orgs       = SysConfig.orgConfig.Orgs.Where(c => c.OrgId == gd_station.OrgId).ToList();

            if (orgs == null || orgs.Count == 0)
            {
                LogMg.AddError("找不到orgId:" + gd_station.OrgId);
                return;
            }
            XML_Org org = orgs[0];

            GuangDaiService.CorePlatformWebServiceClient ws = new GuangDaiService.CorePlatformWebServiceClient(org.gdServerCfg);
            if (gd_station != null && gd_station.tests != null)
            {
                foreach (Clazz.Config.XML_Test test in gd_station.tests)
                {
                    try
                    {
                        ModbusReturn modbusReturn = new ModbusReturn();
                        int          count        = 0; //执行错误的次数
                        while (modbusReturn.success == false && count < SysConfig.userProfile.ExecuteFailureCount)
                        {
                            modbusReturn.clear();
                            //LogManager.AddDebug(string.Format("开始接收  时间:{0},站点:{1}  testid:{2}", DateTime.Now.ToString(), gd_station.name, test.TestId));
                            GuangDaiCommunicationModbus.readdata(ws, gd_station.wscId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, modbusReturn);
                            // result = modbus.readdata(gd_station.Protocol, gd_station.socket, gd_station.TelOrGprsId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, test.ReceiveTimeout, ref value);
                            log.Info("wscId=" + gd_station.wscId + " testid=" + test.TestId + "  address=" + test.Address + "  " + modbusReturn.ToString());
                            count++;
                        }

                        if (modbusReturn.success)                                                                 //接收数据成功
                        {
                            if (Between(modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max)) //如果值不在取值范围内,则不要
                            {
                                SWSDataContext db = new SWSDataContext(Util.ServerSocketHelper.GetConnection(gd_station.dbName));
                                SaveToDatabase(db, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber);    //保存数据
                                LogMg.AddDebug(string.Format("接收时间:{0}, 站点:{1},value:{2},testid:{3}", DateTime.Now.ToString(), gd_station.name, modbusReturn.value * test.Multiple + test.AddNumber, test.TestId));
                                // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2},值:{3}", DateTime.Now.ToString(), station.Name, test.TestId, value * test.Multiple + test.AddNumber));
                                updateStationOnlineInfo(db, gd_station.stationId);
                            }
                            else
                            {
                                LogMg.AddDebug(string.Format("接收时间:【{0}】,站点:{1},testid:{2},乘以倍率之后的值:{3}   由于值不在范围内[{4},{5}],丢弃", DateTime.Now.ToString(), gd_station.name, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max));
                            }
                        }
                        else
                        {
                            //接收数据失败
                            LogMg.AddDebug(string.Format("数据库名:{0}    testid:{1}   接收数据失败   原因:{2}", gd_station.dbName, test.TestId, modbusReturn.ErrorMsg));
                            //   MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2}, 接收数据失败", DateTime.Now.ToString(), station.Name, test.TestId));
                        }
                    }
                    catch (SocketException)
                    {
                    }
                    catch (Exception ex)
                    {
                        LogMg.AddError(ex);
                        DEBUG.MsgBox(ex.ToString());
                    }
                }
            }
        }
Example #6
0
        private static void ExecuteOrder(object state)
        {
            ///第一步:找出需要采集的指标
            ///第二步:循环采集的指标,取出一个指标,
            ///第三步:锁住客户端
            ///第四步:采集
            ///第五步:释放客户端
            ///第六步:回到第二步
            ///结束
            DTUClientInfo client = (DTUClientInfo)state;

            Clazz.Config.XML_Station station = SysConfig.DTU_StationConfig.GetStationByTel(client.TelOrGprsId);
            if (station == null)
            {
                return;
            }
            List <Clazz.Config.XML_Test> listTest = station.ListTest;

            if (station != null && listTest != null)
            {
                foreach (Clazz.Config.XML_Test test in listTest)
                {
                    using (MyLock mylock = new MyLock(client, 3000, false))   // 在循环内锁
                    {
                        if (mylock.IsTimeout == false)
                        {
                            //LogManager.AddDebug("AutoCollectionThread 线程:" + Thread.CurrentThread.ManagedThreadId + " 开始锁了    是否超时" + mylock.IsTimeout);

                            try
                            {
                                ModbusReturn modbusReturn = new ModbusReturn();
                                int          count        = 0; //执行错误的次数
                                while (modbusReturn.success == false && count < SysConfig.userProfile.ExecuteFailureCount)
                                {
                                    modbusReturn.clear();
                                    LogMg.AddDebug(string.Format("开始接收  时间:{0},站点:{1} tel:{2},testid:{3}", DateTime.Now.ToString(), client.Name, client.TelOrGprsId.ToString(), test.TestId));
                                    modbus.readdata(client.Protocol, client.socket, client.TelOrGprsId, test.Address, test.RegisterNo, test.FunctionCode, test.DataType, test.DecodeOrder, test.ReceiveTimeout, modbusReturn);
                                    count++;
                                }

                                if (modbusReturn.success) //接收数据成功
                                {
                                    DTU_ClientManager.UpdateLastVisitTime(client, DateTime.Now);
                                    if (Between(modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max))    //如果值不在取值范围内,则不要
                                    {
                                        SWSDataContext db = new SWSDataContext(Util.ServerSocketHelper.GetConnection(station.Org.DBName));
                                        SaveToDatabase(db, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber);    //保存数据
                                        LogMg.AddDebug(string.Format("接收时间:{0}, tel:{1},value:{2},testid:{3}", DateTime.Now.ToString(), client.TelOrGprsId.ToString(), modbusReturn.value * test.Multiple + test.AddNumber, test.TestId));
                                        // MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2},值:{3}", DateTime.Now.ToString(), station.Name, test.TestId, value * test.Multiple + test.AddNumber));
                                    }
                                    else
                                    {
                                        LogMg.AddDebug(string.Format("接收时间:【{0}】,站点:{1},testid:{2},乘以倍率之后的值:{3}   由于值不在范围内[{4},{5}],丢弃", DateTime.Now.ToString(), station.Name, test.TestId, modbusReturn.value * test.Multiple + test.AddNumber, test.Min, test.Max));
                                    }
                                }
                                else
                                {
                                    //接收数据失败
                                    LogMg.AddDebug(string.Format("接收数据失败"));
                                    //   MessageQueue.Enqueue_DataInfo(string.Format("接收时间:【{0}】,站点:{1},testid:{2}, 接收数据失败", DateTime.Now.ToString(), station.Name, test.TestId));
                                    if (modbusReturn.ErrorMsg.Contains("设备未在线"))
                                    {
                                        return;
                                    }
                                }
                            }
                            catch (SocketException)
                            {
                            }
                            catch (Exception ex)
                            {
                                LogMg.AddError(ex);
                                DEBUG.MsgBox(ex.ToString());
                            }
                            //LogManager.AddDebug("AutoCollectionThread 线程:" + Thread.CurrentThread.ManagedThreadId + " 释放锁了   ");
                        }
                        else
                        {
                            LogMg.AddDebug("AutoCollectionThread 锁失败了");
                        }
                    }
                }
            }
        }