Ejemplo n.º 1
0
        private void Collect(List <SoapData> soapDatas, ref Dictionary <int, Station> dicStations)
        {
            if (soapDatas == null)
            {
                return;
            }
            if (dicStations == null)
            {
                return;
            }

            foreach (int key in dicStations.Keys)
            {
                Station station    = dicStations[key];
                int     errorTimes = 0; // 三个离线就认为其离线了
                foreach (Sensor sensor in dicStations[key].sensors)
                {
                    // 防止采集的点多了,错误消息炸了,每个都报出来了---直接让其离线
                    if (errorTimes >= 3)
                    {
                        TraceManagerForProject.AppendErrMsg("StationName:" + station._Name + "三个条目采集失败,已跳过该站点采集,请检查点表和数据源");
                        dicStations[key].IsOnline = false;
                        break;
                    }

                    // 拿到数据源
                    SoapData[] curSoapDatas = soapDatas.Where(y => y.称 == station._Name.ToUpper()).ToArray(); // 注意转换大写在比较
                    if (curSoapDatas.Length == 0)
                    {
                        sensor.MakeFail("未在WEB-SOAP-兴国数据源中找到配置站点信息,站点编码:" + station._GUID);
                        TraceManagerForProject.AppendErrMsg("未在WEB-SOAP-兴国数据源中找到配置站点信息,站点编码:" + station._GUID);
                        errorTimes++;
                        continue;
                    }
                    object pointDataSource;
                    try
                    {
                        SoapData curSoapData = curSoapDatas[0];

                        // 在拿到值
                        Type type = curSoapData.GetType();                                                 //获取类型
                        System.Reflection.PropertyInfo propertyInfo = type.GetProperty(sensor.sensorName); //获取指定名称的属性
                        pointDataSource = propertyInfo.GetValue(curSoapData, null);                        //获取属性值
                    }
                    catch (Exception e)
                    {
                        string er = string.Format("未在WEB监测点数据源中找到配置站点信息:{0}找到点地址为:{1}的点,错误原因:{2}" + station._Name, sensor.sensorName, e.Message);
                        sensor.MakeFail(er);
                        TraceManagerForProject.AppendErrMsg(er);
                        errorTimes++;
                        continue;
                    }

                    // 根据数据源获取数据
                    sensor.ReadWEBSoap(pointDataSource);
                    //sensor.LastTime = tempTime;// 使用采集时间,不要用当前时间
                    //sensor.State = ValueState.Success;
                    station.IsOnline = true;

                    if (sensor.State == ValueState.Fail)
                    {
                        string er = string.Format("站点名称:{0},sensorName:{1},取值错误:{2}", station._Name, sensor.sensorName, sensor.Mess);
                        TraceManagerForProject.AppendErrMsg(er);
                        errorTimes++;
                        continue;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private List <SoapData> GetSoapDataFromXML(string streamString)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(streamString);
            string s = doc.DocumentElement["soap:Body"]["getXGInfoResponse"]["getXGInfoResult"]["diffgr:diffgram"].InnerXml;

            doc.LoadXml(s);
            XmlNode         node = doc.SelectSingleNode("NewDataSet");
            List <SoapData> list = new List <SoapData>();

            foreach (XmlNode childNode in node.ChildNodes)
            {
                SoapData data = new SoapData();
                foreach (XmlNode sonNode in childNode.ChildNodes)
                {
                    switch (sonNode.Name)
                    {
                    case "名称":
                        data.称 = sonNode.InnerText;
                        break;

                    case "id":
                        data.id = Convert.ToInt32(sonNode.InnerText);
                        break;

                    case "设备ID":
                        data.设备ID = Convert.ToInt32(sonNode.InnerText);
                        break;

                    case "记录时间":
                        data.记录时间 = Convert.ToDateTime(sonNode.InnerText);
                        break;

                    case "采集时间":
                        data.采集时间 = Convert.ToDateTime(sonNode.InnerText);
                        break;

                    case "设备状态":
                        data.设备状态 = sonNode.InnerText;
                        break;

                    case "通讯状态":
                        data.通讯状态 = sonNode.InnerText;
                        break;

                    case "数据来源":
                        data.数据来源 = sonNode.InnerText;
                        break;

                    case "压力":
                        data.压力 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "电池电压":
                        data.电池电压 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "信号强度":
                        data.信号强度 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "瞬时流量":
                        data.瞬时流量 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "正累计流量":
                        data.正累计流量 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "负累计流量":
                        data.负累计流量 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "净累计流量":
                        data.净累计流量 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "压力2":
                        data.压力2 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "电池电压报警":
                        data.电池电压报警 = sonNode.InnerText;
                        break;

                    case "压力下限报警":
                        data.压力下限报警 = sonNode.InnerText;
                        break;

                    case "压力上限报警":
                        data.压力上限报警 = sonNode.InnerText;
                        break;

                    case "泵1运行":
                        data.泵1运行 = sonNode.InnerText;
                        break;

                    case "泵1故障":
                        data.泵1故障 = sonNode.InnerText;
                        break;

                    case "泵2运行":
                        data.泵2运行 = sonNode.InnerText;
                        break;

                    case "泵2故障":
                        data.泵2故障 = sonNode.InnerText;
                        break;

                    case "浊度":
                        data.浊度 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "余氯":
                        data.余氯 = Convert.ToDecimal(sonNode.InnerText);
                        break;

                    case "门开关":
                        data.门开关 = sonNode.InnerText;
                        break;

                    case "浊度故障":
                        data.浊度故障 = sonNode.InnerText;
                        break;

                    case "浊度上限报警":
                        data.浊度上限报警 = sonNode.InnerText;
                        break;

                    case "浊度下限报警":
                        data.浊度下限报警 = sonNode.InnerText;
                        break;

                    case "余氯故障":
                        data.余氯故障 = sonNode.InnerText;
                        break;

                    case "余氯上限报警":
                        data.余氯上限报警 = sonNode.InnerText;
                        break;

                    case "余氯下限报警":
                        data.余氯下限报警 = sonNode.InnerText;
                        break;

                    case "水表通讯故障":
                        data.水表通讯故障 = sonNode.InnerText;
                        break;

                    case "浊度状态":
                        data.浊度状态 = sonNode.InnerText;
                        break;

                    case "余氯状态":
                        data.余氯状态 = sonNode.InnerText;
                        break;
                    }
                }
                list.Add(data);
            }
            return(list);
        }