public Logic(int stationPlatormCount) { aFirstLastTrainPackage = new sFirstLastTrainPackage(); aFirstLastTrainPackage.trainList = new List <sFirstLastTrain>(); aTrainPackage = new sTrainPackage(); aTrainPackage.trainList = new List <sTrain>(); atsList = new List <sATS_Platform>(); if (atsList.Count == 0) { sATS_Platform atsPlatorm = new sATS_Platform(); atsPlatorm.sTrain1 = new sATS_TIME(); atsPlatorm.sTrain2 = new sATS_TIME(); atsPlatorm.sTrain3 = new sATS_TIME(); atsPlatorm.sTrain4 = new sATS_TIME(); for (int i = 0; i < stationPlatormCount; i++) { atsList.Add(atsPlatorm); } } }
public List <sATS_Platform> process(byte[] dataArry, ref IConfig IConfigInterface) { #region 解析协议数据 //lock (this) { // 打印原始日志 string data = "ATS--PIS-"; data += DateTime.Now.ToString() + "::-------"; for (int i = 0; i < dataArry.Length; i++) { data += "0x" + dataArry[i].ToString("x2") + ", "; } logger.Info(data); data = ""; int UseLength = 0; string TimeNow; while (dataArry.Length - UseLength > 0) { if (dataArry.Length - UseLength < 4) { logger.Info("数据长度有误,数据总长:" + dataArry.Length + "已使用长度:" + UseLength); } TimeNow = DateTime.Now.ToString(); byte[] Buf = new byte[dataArry.Length - UseLength]; Buffer.BlockCopy(dataArry, UseLength, Buf, 0, dataArry.Length - UseLength); sMsgFrame aMsgFrame = new sMsgFrame(); byte[] msgBuf = new byte[Marshal.SizeOf(aMsgFrame)]; Buffer.BlockCopy(Buf, 0, msgBuf, 0, Marshal.SizeOf(aMsgFrame)); Array.Reverse(msgBuf, 1, 2); aMsgFrame = (sMsgFrame)BytesToStuct(msgBuf, typeof(sMsgFrame)); if (Buf[0] == 0xFF) { if (Buf[7] == 33) { logger.Info(DateTime.Now.ToString() + "--" + "解析站台数据"); if (aMsgFrame.multiFlag == 1) { logger.Info("本包数据不是完整信息"); break; } UseLength = aMsgFrame.totalLength + UseLength + 3; aTrainPackage.sPackage = aPackageData; byte[] packBuf = new byte[Marshal.SizeOf(aPackageData)]; Buffer.BlockCopy(Buf, Marshal.SizeOf(aMsgFrame), packBuf, 0, Marshal.SizeOf(aPackageData)); Array.Reverse(packBuf, 0, 2); Array.Reverse(packBuf, 2, 2); aPackageData = (sPackageData)BytesToStuct(packBuf, typeof(sPackageData)); logger.Info(DateTime.Now.ToString() + "--" + "站台总数:" + aPackageData.Platform_cnt.ToString()); for (int i = 0; i < aPackageData.Platform_cnt; i++) { string stempNo1 = "第一列车"; string stempNo2 = "第二列车"; string stempNo3 = "第三列车"; string stempNo4 = "第四列车"; sTrain aTrain = new sTrain(); byte[] buf = new byte[Marshal.SizeOf(aTrain)]; Buffer.BlockCopy(Buf, Marshal.SizeOf(aMsgFrame) + Marshal.SizeOf(aPackageData) + (i * Marshal.SizeOf(aTrain)), buf, 0, Marshal.SizeOf(aTrain)); Array.Reverse(buf, 1, 2); Array.Reverse(buf, 4, 2); Array.Reverse(buf, 6, 2); Array.Reverse(buf, 8, 2); Array.Reverse(buf, 11, 4); Array.Reverse(buf, 15, 4); Array.Reverse(buf, 26, 2); Array.Reverse(buf, 28, 2); Array.Reverse(buf, 30, 2); Array.Reverse(buf, 32, 4); Array.Reverse(buf, 36, 4); Array.Reverse(buf, 44, 2); Array.Reverse(buf, 46, 2); Array.Reverse(buf, 48, 2); Array.Reverse(buf, 50, 4); Array.Reverse(buf, 54, 4); Array.Reverse(buf, 62, 2); Array.Reverse(buf, 64, 2); Array.Reverse(buf, 66, 2); Array.Reverse(buf, 68, 4); Array.Reverse(buf, 72, 4); aTrain = (sTrain)BytesToStuct(buf, typeof(sTrain)); long seconds = (long)DateTime.UtcNow.Subtract(DateTime.Parse("1970-1-1")).TotalSeconds; // aTrainPackage.trainList.Add(aTrain); #region 打印日志 logger.Info(TimeNow + "当前站台:" + aTrain.station_id.ToString() + " 当前上下行: " + aTrain.platform_id.ToString()); stempNo1 += TimeNow + " 有效:" + aTrain.validityField1.ToString() + " 列车服务:" + aTrain.train_service_number1.ToString() + " 当前时间:" + seconds + " 到站时间:" + aTrain.scheduled_arrival_time1.ToString() + " 离站时间:" + aTrain.scheduled_departure_time1.ToString() + " 目的地号:" + aTrain.destination_id.ToString() + " 跳站标志:" + aTrain.skip_status1.ToString() + " 即将进站:" + aTrain.pre_arrival.ToString() + " 列车进站:" + aTrain.arrival_status.ToString(); logger.Info(stempNo1); stempNo2 += TimeNow + " 有效:" + aTrain.validityField2.ToString() + " 列车服务:" + aTrain.train_service_number2.ToString() + " 当前时间:" + seconds + " 到站时间:" + aTrain.scheduled_arrival_time2.ToString() + " 离站时间:" + aTrain.scheduled_departure_time2.ToString() + " 目的地号:" + aTrain.destination_id2.ToString() + " 跳站标志:" + aTrain.skip_status2.ToString(); logger.Info(stempNo2); stempNo3 += TimeNow + " 有效:" + aTrain.validityField3.ToString() + " 列车服务:" + aTrain.train_service_number3.ToString() + " 当前时间:" + seconds + " 到站时间:" + aTrain.scheduled_arrival_time3.ToString() + " 离站时间:" + aTrain.scheduled_departure_time3.ToString() + " 目的地号:" + aTrain.destination_id3.ToString() + " 跳站标志:" + aTrain.skip_status3.ToString(); logger.Info(stempNo3); stempNo4 += TimeNow + " 有效:" + aTrain.validityField4.ToString() + " 列车服务:" + aTrain.train_service_number4.ToString() + " 当前时间:" + seconds + " 到站时间:" + aTrain.scheduled_arrival_time4.ToString() + " 离站时间:" + aTrain.scheduled_departure_time4.ToString() + " 目的地号:" + aTrain.destination_id4.ToString() + " 跳站标志:" + aTrain.skip_status4.ToString(); logger.Info(stempNo4); #endregion sATS_Platform aPlatorm = new sATS_Platform(); sATS_TIME train1 = new sATS_TIME(); sATS_TIME train2 = new sATS_TIME(); sATS_TIME train3 = new sATS_TIME(); sATS_TIME train4 = new sATS_TIME(); for (int j = 0; j < IConfigInterface.getConfigObj().confgStationList.Count; j++) { for (int k = 0; k < IConfigInterface.getConfigObj().confgStationList[j].destCode.Count; k++) { if (IConfigInterface.getConfigObj().confgStationList[j].destCode[k] == aTrain.destination_id.ToString()) { train1.strDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[0]; train1.strEnDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[1]; } if (IConfigInterface.getConfigObj().confgStationList[j].destCode[k] == aTrain.destination_id2.ToString()) { train2.strDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[0]; train2.strEnDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[1]; } if (IConfigInterface.getConfigObj().confgStationList[j].destCode[k] == aTrain.destination_id3.ToString()) { train3.strDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[0]; train3.strEnDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[1]; } if (IConfigInterface.getConfigObj().confgStationList[j].destCode[k] == aTrain.destination_id4.ToString()) { train4.strDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[0]; train4.strEnDst = IConfigInterface.getConfigObj().confgStationList[j].stationName[1]; } } } seconds = (long)DateTime.UtcNow.Subtract(DateTime.Parse("1970-1-1")).TotalSeconds; long sec = aTrain.scheduled_arrival_time1 - seconds; long lsec = aTrain.scheduled_departure_time1 - seconds; long min = sec / 60; if ((sec % 60) > 30) { min = min + 1; } //无效 if (aTrain.validityField1 != 1) { train1.strTime = ""; train1.strEnTime = ""; train1.strDst = ""; train1.strEnDst = ""; logger.Info(TimeNow + "第一趟车无效:" + aTrain.validityField1); } //时间小于0 else if (lsec < 0 && aTrain.arrival_status == 0 && aTrain.pre_arrival == 0) { train1.strTime = ""; train1.strEnTime = ""; logger.Info(TimeNow + "第一趟车时间错误:" + aTrain.scheduled_arrival_time1 + "当前时间" + seconds); } //列车跳站 else if (aTrain.skip_status1 == 1) { train1.strTime = IConfigInterface.getConfigObj().skipStaionChValue; train1.strEnTime = IConfigInterface.getConfigObj().skipStationEngValue; } //列车到站 else if (sec <= IConfigInterface.getConfigObj().clearShow&& IConfigInterface.getConfigObj().clearShow > 0) { train1.strTime = ""; train1.strEnTime = ""; } else if (aTrain.arrival_status == 1 && IConfigInterface.getConfigObj().clearShow == 0) { train1.strTime = IConfigInterface.getConfigObj().arriveChValue; train1.strEnTime = IConfigInterface.getConfigObj().arriveEngValue; } //列车即将到站 else if ((sec <= IConfigInterface.getConfigObj().arrivingShow&& IConfigInterface.getConfigObj().arrivingShow > 0) || (aTrain.pre_arrival == 1 && IConfigInterface.getConfigObj().arrivingShow == 0)) { train1.strTime = IConfigInterface.getConfigObj().arrivingComingChValue; train1.strEnTime = IConfigInterface.getConfigObj().arrivingComingEngValue; } //正常显示时间 else { train1.strEnTime = min.ToString(); train1.strTime = min.ToString(); } sec = aTrain.scheduled_arrival_time2 - seconds; lsec = aTrain.scheduled_departure_time2 - seconds; min = sec / 60; if (aTrain.validityField2 != 1) { train2.strTime = " "; train2.strEnTime = " "; train2.strDst = ""; train2.strEnDst = ""; logger.Info(TimeNow + "第二趟车无效:" + aTrain.validityField2); } else if (lsec < 0) { train2.strTime = " "; train2.strEnTime = " "; logger.Info(TimeNow + "第二趟车时间错误:" + aTrain.scheduled_arrival_time2 + "当前时间" + seconds); } else { train2.strTime = min.ToString(); train2.strEnTime = min.ToString(); } sec = aTrain.scheduled_arrival_time3 - seconds; lsec = aTrain.scheduled_departure_time3 - seconds; min = sec / 60; if (min < 0 || aTrain.validityField3 != 1) { train3.strTime = " "; train3.strEnTime = " "; train3.strDst = ""; train3.strEnDst = ""; logger.Info(TimeNow + "第三趟车无效:" + aTrain.validityField3); } else if (lsec < 0) { train3.strTime = " "; train3.strEnTime = " "; logger.Info(TimeNow + "第三趟车时间错误:" + aTrain.scheduled_arrival_time3 + "当前时间" + seconds); } else { train3.strTime = min.ToString(); train3.strEnTime = min.ToString(); } sec = aTrain.scheduled_arrival_time4 - seconds; lsec = aTrain.scheduled_departure_time4 - seconds; min = sec / 60; if (min < 0 || aTrain.validityField4 != 1) { train4.strTime = " "; train4.strEnTime = " "; train4.strDst = ""; train4.strEnDst = ""; logger.Info(TimeNow + "第四趟车无效:" + aTrain.validityField4); } else if (lsec < 0) { train4.strTime = " "; train4.strEnTime = " "; logger.Info(TimeNow + "第四趟车时间错误:" + aTrain.scheduled_arrival_time4 + "当前时间" + seconds); } else { train4.strTime = min.ToString(); train4.strEnTime = min.ToString(); } if (aTrain.platform_id == 1 || aTrain.platform_id == 2) { int Count = ((aTrain.station_id - 1) * 2) + (aTrain.platform_id - 1); if (Count < atsList.Count) { aPlatorm.sTrain1 = train1; aPlatorm.sTrain2 = train2; aPlatorm.sTrain3 = train3; aPlatorm.sTrain4 = train4; atsList[Count] = aPlatorm; #region 打印日志 logger.Info(TimeNow + "第一趟车目的地:" + atsList[Count].sTrain1.strDst + " 到站时间: " + atsList[Count].sTrain1.strTime); logger.Info(TimeNow + "第二趟车目的地:" + atsList[Count].sTrain2.strDst + " 到站时间: " + atsList[Count].sTrain2.strTime); logger.Info(TimeNow + "第三趟车目的地:" + atsList[Count].sTrain3.strDst + " 到站时间: " + atsList[Count].sTrain3.strTime); logger.Info(TimeNow + "第四趟车目的地:" + atsList[Count].sTrain4.strDst + " 到站时间: " + atsList[Count].sTrain4.strTime); #endregion } else { logger.Info(TimeNow + "站号超出:" + aTrain.station_id + " 站台编号: " + aTrain.platform_id); } } else { logger.Info(TimeNow + "车站号:" + aTrain.station_id + " 站台号超出: " + aTrain.platform_id); } } } else if (Buf[7] == 34) { logger.Info(TimeNow + "首末车数据"); UseLength = aMsgFrame.totalLength + UseLength + 3; //aFirstLastTrainPackage.sPackage = aPackageFirstLastData; //byte[] packBuf = new byte[Marshal.SizeOf(aPackageFirstLastData)]; //Buffer.BlockCopy(Buf, Marshal.SizeOf(aMsgFrame), packBuf, 0, Marshal.SizeOf(aPackageFirstLastData)); //Array.Reverse(packBuf, 0, 2); //Array.Reverse(packBuf, 2, 2); //Array.Reverse(packBuf, 4, 2); //aPackageFirstLastData = (sPackageFirstLastData)BytesToStuct(packBuf, typeof(sPackageFirstLastData)); //aFirstLastTrainPackage.sPackage = aPackageFirstLastData; //for (int i = 0; i < aPackageFirstLastData.Platform_cnt; i++) //{ // sFirstLastTrain aFirstLastTrain = new sFirstLastTrain(); // byte[] buf = new byte[Marshal.SizeOf(aFirstLastTrain)]; // Buffer.BlockCopy(Buf, Marshal.SizeOf(aMsgFrame) + Marshal.SizeOf(aPackageFirstLastData) + (i * Marshal.SizeOf(aFirstLastTrain)), buf, 0, Marshal.SizeOf(aFirstLastTrain)); // Array.Reverse(buf, 1, 2); // Array.Reverse(buf, 3, 2); // Array.Reverse(buf, 5, 2); // Array.Reverse(buf, 7, 4); // Array.Reverse(buf, 11, 4); // aFirstLastTrain = (sFirstLastTrain)BytesToStuct(buf, typeof(sFirstLastTrain)); // aFirstLastTrainPackage.trainList.Add(aFirstLastTrain); //} } } else { logger.Info(TimeNow + "数据包错误"); UseLength = dataArry.Length; } } } return(atsList); #endregion }