private MTRDataMessage ConvertDataStringToTypeData(MTRDataMessageString dataString) { var mtrData = new MTRDataMessage(); try { mtrData.Preamble = int.Parse(dataString.Preamble); // Ensure the message start with preamble mtrData.PackageSize = int.Parse(dataString.PackageSize); // Packet size, should be 230 when datamessage mtrData.PackageType = dataString.PackageType[0]; // Packet type, should be M as MTR message mtrData.MtrSerialNo = int.Parse(dataString.MtrSerialNo); //serialNumber of the MTR reader mtrData.TimeStamp = DateTime.Parse(dataString.TimeStamp); // binary year, month day, hour, minute, second mtrData.Time_ms = long.Parse(dataString.Time_ms); // Time is not yet in use mtrData.PackageNo = int.Parse(dataString.PackageNo); // counter from 1 to up mtrData.CardId = int.Parse(dataString.CardId); // binary, least sign first // Next tree is used when data retrived from history //mtrData.ProductWeek = dataString.ProductWeek; //mtrData.ProductYear = dataString.ProductYear; //mtrData.ECardHeadSum = dataString.ECardHeadSum; foreach (string[] checkPonit_s in dataString.CheckPoints) { var checkPoint = new MTRDataCheckPoint(); checkPoint.CodeN = int.Parse(checkPonit_s[0]); checkPoint.TimeN_s = int.Parse(checkPonit_s[1]); checkPoint.InfoField = checkPonit_s[2]; checkPoint.CheckSum = int.Parse(checkPonit_s[3]); checkPoint.FillerNull = int.Parse(checkPonit_s[4]); mtrData.CheckPoints.Add(checkPoint); } } catch (Exception ex) { return(null); } return(mtrData); }
private void HandleMTRStatusMessage(string data) { //MTR--datamessage // ---------------- //Fieldname # bytes //Preamble 4 FFFFFFFF(hex)(4 "FF"'s never occur "inside" a message). //Package -size 1 number of bytes excluding preamble(= 230) //Package -type 1 'M' as "MTR-datamessage". //MTR - id 2 Serial number of MTR2; Least significant byte first //Timestamp 6 Binary Year, Month, Day, Hour, Minute, Second //TS - [ms] 2 Milliseconds NOT YET USED, WILL BE 0 IN THIS VERSION //Package# 4 Binary Counter, from 1 and up; Least sign byte first //Card - id 3 Binary, Least sign byte first //Producweek 1 0 - 53; 0 when package is retrived from "history" //Producyear 1 94 - 99,0 -..X; 0 when package is retrived from "history" //ECardHeadSum 1 Headchecksum from card; 0 when package is retrived from "history" //The following fields are repeated 50 times: //CodeN 1 ControlCode; unused positions have 0 //TimeN 2 Time binary seconds.Least sign. first, Most sign. last; unused: 0 //ASCII string 56 Various info depending on ECard - type; 20h when retr.from "history"(See ASCIIstring) //Checksum 1 Binary SUM(MOD 256) of all bytes including Preamble //NULL - Filler 1 Binary 0(to avoid potential 5 FF's. Making it easier to haunt PREAMBLE // ---------------------------------------- //Size 234 var MTRDataStrings = new MTRDataMessageString(); MTRDataStrings.Preamble = data.Substring(0, 4); // Ensure the message start with preamble MTRDataStrings.PackageSize = data.Substring(4); // Packet size, should be 230 when datamessage MTRDataStrings.PackageType = data.Substring(5); // Packet type, should be M as MTR message MTRDataStrings.MtrSerialNo = data.Substring(6, 2); //serialNumber of the MTR reader MTRDataStrings.TimeStamp = data.Substring(8, 6); // binary year, month day, hour, minute, second MTRDataStrings.Time_ms = data.Substring(14, 2); // Time is not yet in use MTRDataStrings.PackageNo = data.Substring(15, 4); // counter from 1 to up MTRDataStrings.CardId = data.Substring(19, 3); // binary, least sign first // Next tree is used when data retrived from history //MTRData.ProductWeek = data.Substring(22, 53); //MTRData.ProductYear = data.Substring(94,5); //MTRData.ECardHeadSum = data.Substring(100); List <MTRDataCheckPoint> checkPoints = new List <MTRDataCheckPoint>(); for (int checkPointNo = 0; checkPointNo < 50; checkPointNo++) { var checkPointDataPosition = 61 * checkPointNo; var checkPoint = new MTRDataCheckPoint(); var codeN = data.Substring(100 + checkPointDataPosition, 1); var timeN = data.Substring(102 + checkPointDataPosition, 2); var info = data.Substring(103 + checkPointDataPosition, 56); var checkSum = data.Substring(159 + checkPointDataPosition, 1); var filler = data.Substring(160 + checkPointDataPosition, 1); MTRDataStrings.CheckPoints.Add(new[] { codeN, timeN, info, checkSum, filler }); } var mtrData = ConvertDataStringToTypeData(MTRDataStrings); var listDatas = new List <MTRDataMessage>(); listDatas.Add(mtrData); //WriteValuesToFile(listDatas); }