public TermFile() { Config cConf = new Config(); strDirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); int lastNum = GetLastFuleNum(); lastNum++; string strNum = "000"; int len = 3; if (lastNum<10) { len = 1; } else if (lastNum < 100) { len = 2; } strNum = strNum.Substring(0,3 - len) + lastNum.ToString(); string strYear = DateTime.Now.Year.ToString(); string strMonth = DateTime.Now.Month.ToString(); string strDay = DateTime.Now.Day.ToString(); fileName = strDirPath+"/act_" + strYear + strMonth + strDay + strNum + ".txt"; }
public CTerm(int TermId,string TermType) { _TermType = TermType; _TermId = TermId; Config cConf = new Config(); Config.SysObjectProtocol sProtocol; //arrProtocolElement = cConf.getObjectProtocol(TermType); _TimeWait = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeWait.ToString())); _TimeDelay = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeDelay.ToString())); }
private void InitSetting() { string strDemo = ""; try { Sys.Config cConf = new UniTerm.Sys.Config(); numPeriod.Value = cConf.getPeriod(); numErr.Value = Convert.ToInt16(cConf.getappSettings("AttemptCount")); lblDirPath.Text = cConf.getappSettings("DataSyncDir"); chkResponse.Checked = Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString())); numDelay.Value = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeDelay.ToString())); numWait.Value = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeWait.ToString())); strDemo = cConf.getappSettings(Config.SettingField.Demo.ToString()); if (strDemo == "") { chkDemo.Visible = false; } else { chkDemo.Checked = Convert.ToBoolean(cConf.getappSettings(Config.SettingField.Demo.ToString())); } // Check port //string[] ports = SerialPort.GetPortNames(); // Display each port name to the console. /*foreach(string port in ports) * { * comboPort.Items.Add("Com" + port); * } */ //@todo //if (Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString()))==True) //{ // chkResponse.Checked = true; //} } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
public void Open() { Config cConf = new Config(); // Set the port's settings comport.BaudRate = 9600; comport.DataBits = 8; comport.StopBits = StopBits.One; comport.Parity = Parity.None; comport.PortName = cConf.getappSettings(Config.SettingField.Port.ToString()); comport.RtsEnable = true; comport.DtrEnable = true; //19.02.2012 //comport.ReadTimeout = 500; //comport.WriteTimeout = 300; // Begin communications comport.Open(); // Enter an application loop to keep this thread alive }
/// <summary> /// Получение списка записанных файлов /// </summary> /// <returns></returns> private int GetLastFuleNum() { String[] strFiles; Config SConf = new Config(); //string strDirPath = "G:/temp/"; //SConf.getappSettings("DataSyncDir"); string strFilePath = strDirPath;// GetFileLoadPath(); string strYear = DateTime.Now.Year.ToString(); string strMonth = DateTime.Now.Month.ToString(); string strDay = DateTime.Now.Day.ToString(); strFiles = Directory.GetFiles(strFilePath, "act_" + strYear + strMonth + strDay + "*.txt"); //Сортировочка: Array.Sort(strFiles); String strNum = "1"; foreach (String fname in strFiles) { strNum = fname.Substring(fname.Length - 7, 3); } //Array.Sort(strFiles, 0, strFiles.Length, new FileSort()); return Convert.ToInt16(strNum); }
/// <summary> /// Demo regime /// </summary> private void TerminalRefreshDemo() { Config cConf = new Config(); arrInfoLine = new ArrayList(); String strLine; String[] arrLine; string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); CFile FileDemo = new CFile(DirPath+"/demo_act.txt"); CFile FileDemoNew = new CFile(DirPath + "/demo_act.txt"); arrLineDemo = FileDemo.Read(); /* Прогресс */ statusProgress.Visible = true; statusProgress.Value = 0; TermFile cFileObj = new TermFile(); int c_count = arrLineDemo.Count; int c_Rand; Random fixRand = new Random(); c_Rand = fixRand.Next(1, 7); for (int i = 0; i < c_count; i++) { Thread.Sleep(1000); statusProgress.Step = (80 / c_count); statusProgress.PerformStep(); //arrInfoLine.Add(arrLineDemo[i]); strLine = arrLineDemo[i]; //strLine = strLine.Replace(".", ","); arrLine = strLine.Split(';'); strLine = ""; double dd; int idd; int l_count = arrLine.Length; for (int a = 0; a < l_count; a++) { if (a == 2) { arrLine[a] = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second; } //if (a == 13 || a==14 ||a==15) if (a >10 && Char.IsDigit(Convert.ToChar(arrLine[a].Substring(0,1)))) { try { dd = Convert.ToDouble(arrLine[a]); dd = dd + (dd / 100 * 0.5); arrLine[a] = dd.ToString(); } catch { idd = Convert.ToInt16(arrLine[a]); idd = idd + (idd / 100 * l_count); arrLine[a] = idd.ToString(); } } } strLine = String.Join(";", arrLine); strLine = strLine.Replace(",", "."); if (i <= c_Rand-1) { cFileObj.AddLine(strLine); } FileDemoNew.AddLine(strLine); } cFileObj.Write(); FileDemoNew.Write(false); _tCount++; LogFileSave(arrInfoLine); statusProgress.Visible = false; lblTCount.Text = _tCount.ToString(); lblError.Text = _tError.ToString(); }
/// <summary> /// Опрос терминалов /// </summary> private void TerminalRefresh() { statusMessage.Text = DateTime.Now.ToString( "H:mm:f"); try { lblInfo.Text = "Система в работе."; Config.SysObject SysObject, Sterm; Config cConf = new Config(); string strDemo = ""; strDemo = cConf.getappSettings(Config.SettingField.Demo.ToString()); if (strDemo != "") { if (Convert.ToBoolean(strDemo)) { TerminalRefreshDemo(); return; } } int c_count; CTerm cTermObj; int cAttempt = 0; _Attempt = Convert.ToInt16(cConf.getappSettings(Config.SettingField.AttemptCount.ToString())); cConf.getappSettings("Period"); String strTermData; c_count = arrObject.Count; bool FlagNoTerm = false; for (int ia = 0; ia < c_count; ia++) { Sterm = (Config.SysObject)arrObject[ia]; if (_TermIndex > 0 && Sterm.Index != _TermIndex) { FlagNoTerm = true; } else { FlagNoTerm = false; break; } } if (FlagNoTerm) { lblInfo.Text = "Терминал с номером №" + _TermIndex + " не зарегистрирован в системе."; return; } //TermFile cFileObj = new TermFile(); strTermData = ""; //_tError = 0; arrInfoLine = new ArrayList(); ArrayList arrResponseLine = new ArrayList(); ArrayList arrErrorLine = new ArrayList() ; // Массив строк для записи ошибок bool FlagError = false; /* Прогресс */ statusProgress.Visible = true; statusProgress.Value = 0; for (int i = 0; i < c_count; i++) { statusProgress.Step = (80 / c_count); statusProgress.PerformStep(); SysObject = (Config.SysObject)arrObject[i]; FlagError = false; if (_TermIndex == SysObject.Index || _TermIndex == -1) { /* Опрос терминалов */ cTermObj = new CTerm(SysObject.Index, SysObject.Type); cTermObj.TermProtocolIndex = _TermProtocolIndex; _TermProtocolIndex = _TermProtocolIndex; //-1 Сброс индекса протокола cTermObj.RequestParam = _cTermReqParam; cTermObj.Refresh(cPort); if (cTermObj.isDataError()) { FlagError = true; arrErrorLine.Add("[" + SysObject.Index + "]" + cTermObj.getDataResponseHex()); //statusProgress.Value = statusProgress.Value - _Attempt; statusProgress.Step = 1; while (cAttempt <= _Attempt) { statusProgress.PerformStep(); cTermObj.Refresh(cPort); Thread.Sleep((cAttempt + 1) * 200); strTermData = cTermObj.getDataString(); if (cTermObj.isDataError() == false) { strTermData = cTermObj.getDataString(); FlagError = false; arrErrorLine.Clear(); break; } arrErrorLine.Add("[" + SysObject.Index + "]" + cTermObj.getDataResponseHex()); arrResponseLine.Add("[" + SysObject.Index + "][" + cAttempt + "]" + cTermObj.getDataResponseHex()); cAttempt++; } } else { //MessageBox.Show(cTermObj.getDataString()); strTermData = cTermObj.getDataString(); } //Оригинальные ответы arrResponseLine.Add("[" + SysObject.Index + "]"+cTermObj.getDataResponseHex()); //arrInfoLine.Add(strTermData.ToString()); /* Запись строк в массив */ if (FlagError == false) { arrInfoLine.Add(strTermData.ToString()); } else { _tError++; } } /* Запись оригинальных ответов */ if (Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString())) & arrResponseLine.Count>0) { LogFileSave(arrResponseLine); } _tCount++; } /* Запись в файл, если это не отчет*/ if (_cTermReqParam.ReportType == null) { if (arrInfoLine.Count > 0) { TermFile cFileObj = new TermFile(); foreach (string Line in arrInfoLine) { cFileObj.AddLine(Line); } cFileObj.Write(); } } /* Запись ошибок опросов */ LogErrorFileSave(arrErrorLine); if (_cTermReqParam.ReportType != "") { ReportFileSave(strTermData.Split('='), _cTermReqParam.ReportCode); } } catch(Exception e) { StartStopProcess(Convert.ToBoolean(TerminalAct.Stop)); MessageBox.Show(e.Message, "Ошибка!",MessageBoxButtons.OK, MessageBoxIcon.Stop); lblInfo.Text = "Ошибка в работе системы!"; } statusProgress.Visible = false; lblTCount.Text = _tCount.ToString(); lblError.Text = _tError.ToString(); }
/// <summary> /// Save Report file /// </summary> /// <param name="arrLine"></param> private void ReportFileSave(String[] arrLine, string RepName) { Config cConf = new Config(); CFile cLogFile = new CFile(); string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); string strFilePath = DirPath + "/rep_" + RepName + ".csv"; cLogFile.fileName = strFilePath; System.IO.File.Delete(@strFilePath); foreach (string Line in arrLine) { cLogFile.AddLine(Line); } cLogFile.Write(); }
private void ReadConfigSetting() { Config cConf = new Config(); /* * Получение массива объектов для опроса */ arrObject = cConf.getObjectList(); //Config.SysObject cObj; intervalNewData = cConf.getPeriod() * 1000; timer.Interval = intervalNewData; lblPeriod.Text = Convert.ToString(intervalNewData / 1000); lblAttempt.Text = cConf.getappSettings(Config.SettingField.AttemptCount.ToString()); lblTermCount.Text = cConf.getObjectList().Count.ToString(); lblPort.Text = cConf.getappSettings(Config.SettingField.Port.ToString()); }
/* * Функция подготавливает сообщения к передаче */ private string MessagePrepare(Config.SysObjectCommand Sterm) { string Command = Sterm.Value; String[] arrCmd = Command.Split(';'); string strHexCommand = HexString2Ascii(arrCmd[1]); if (arrCmd[0] == "18") { strHexCommand = strHexCommand + "0c09" + GetDate() + "0c"; strHexCommand = strHexCommand.ToUpper(); } strHexCommand = strHexCommand.Replace("2E", "09"); string strMessage = strHeader + arrCmd[0] + strSTX + strHexCommand + strETX;// strData.Replace("#", Command); //strMessage = "101f18100209300936353533320c0938093909323031310931320933330931370c1003"; string strMessageConvert = strMessage.ToUpper(); string sd = Data_Hex_Asc(ref strMessageConvert); //string lngCommand = CTerm.GetHexToDouble(command).ToString(); //char[] s1 = strMessage.ToCharArray; int intValue = CRCode(sd, sd.Length); //int intValue = CRCode(Command, Command.Length); byte[] intBytes = BitConverter.GetBytes(intValue); //Array.Reverse(intBytes); byte[] result = intBytes; int dd = intBytes[0]; string CRC2 = dd.ToString("X2"); dd = intBytes[1]; string CRC1 = dd.ToString("X2"); strMessage = strMessage + CRC1 + CRC2; //intValue = CRCode(strMessage, strMessage.Length); //intBytes = BitConverter.GetBytes(intValue); strMessage = strSOH + strMessage; return strMessage; }
private void lnkStart_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Config cConf = new Config(); intervalNewData = cConf.getPeriod() * 1000; StartStopProcess(TermStart); }
private void frmMain_Load(object sender, EventArgs e) { ReadConfigSetting(); CreateMenuReport(); /* Создаем объект порт */ cPort = new SPort(); try { cPort.Open(); } catch { MessageBox.Show("Нет доступа к порту!", "Ошибка запуска.", MessageBoxButtons.OK, MessageBoxIcon.Error); } try { Config cConf = new Config(); intervalNewData = cConf.getPeriod() * 1000; //StartStopProcess(TermStart); } catch(Exception err) { StartStopProcess(Convert.ToBoolean(TerminalAct.Stop)); MessageBox.Show(err.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop); lblInfo.Text = "Ошибка в работе системы!"; } //cPort.CurrentDataMode = SPort.DataMode.Hex; //cPort.SendData("2f3f210D0A"); //cPort.SendData("8D0AAF3F218D0A1001101F1D10020930093030330C1003C515"); //string retdata = cPort.ReturnData(); }
/// <summary> /// Запуск формы отчета /// </summary> public void ReportGenerate() { DataTable DT = new DataTable(); Config cConf = new Config(); string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); string fileName = DirPath + "/rep_" + _repName + ".csv"; //DirPath + try { DT = UniTerm.Program.GetDataTableFromCsv(fileName, false); myReportDocument.SetDataSource(DT); ReportViewer.ReportSource = myReportDocument; } catch (Exception e) { MessageBox.Show(_repName + "\n" + e.Message + "\n(" + fileName + ")", "Ошибка при считывании файа отчета", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Обновляет, опрашивает состояние и получает данные с терминала /// </summary> public void Refresh(SPort cPort) { Config cConf = new Config(); Config.SysObjectCommand Sterm; string sCommand; string _resData; string[] testData = {"AA00FF0F014015270313000011713F39B7380000110F3DC2C1A80000006A3E56B5A200D4926200D491FC00000066000000000000000000000000000019AA10F432320000000232", "AA00FF0F020845281503270313403B"}; cPort.TimeWait = _TimeWait; /* * Для прохода по параметрам протокола */ Config.SysObjectProtocol Sprotokol; /* * Получение массива объектов для опроса */ arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName); cPort.CurrentDataMode = SPort.DataMode.Hex; /* * Проходим по набору комманд */ cPort.Clear(); if (!InitDevice(cPort)) { Thread.Sleep(_TimeDelay); if (!InitDevice(cPort)) { Exception myException = new Exception("TEM104 - Ошибка при инициализации."); throw myException; } } cPort.Clear(); if (!TimeDevice(cPort)) { Thread.Sleep(_TimeDelay); if (!TimeDevice(cPort)) { Exception myException = new Exception("TEM104 - Ошибка при получении последнего времени с устройства."); throw myException; } } Sterm = (Config.SysObjectCommand)arrObjectCommand[0]; String[] arrCmd = Sterm.Value.Split(';'); int c_count = arrCmd.Length; /* * Проход по кодам опроса */ for (int ia = 0; ia < c_count; ia++) { cPort.Clear(); /* Подготовка сообщения */ sCommand = MessagePrepare(arrCmd[ia]); /* Посылка сообщения */ cPort.SendData(sCommand); Thread.Sleep(_TimeDelay); ///!!@TODO Убрать после теста!!!! //_resData = testData[ia]; _resData = cPort.ReturnData(); if (!CheckMessage(_resData)){ cPort.Clear(); cPort.SendData(sCommand); Thread.Sleep(_TimeDelay); } _resData = cPort.ReturnData(); _resData = DecodeResponce(_resData, arrCmd[ia]); strData = strData + _resData; } ResData.strData = strData.Replace(",","."); /* * Проверка на готовность ответа порта */ ResData.IsError = false; }
/// <summary> /// Возвращает строку данных /// </summary> /// <returns></returns> public String getDataString() { string sep = ";"; string sepArray = ""; int intStart; int intStartHead; String strItem; String strData, currVal = ""; /*Это заголовок*/ String strDataHead; String retData, strStatus = "49"; Tem05 cTem05 = new Tem05(); SPT961 cSpt961 = new SPT961(); int Code_D1 = 0; int Code_D2 = 0; string sResVal = ""; String[] arrItem; Config cConf = new Config(); string strTime; arrProtocolElement = cConf.getObjectProtocol(_TermType, _TermProtocolIndex); String strAdd = ""; strTime = ResData.strTime; if (strTime == null) { strTime = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second; } retData = _TermId.ToString() + sep + _RequestParam.ProtocolIndex + sep + strTime; if (_RequestParam.ReportType != null) { sepArray = "="; sep = ","; retData = ""; } //Config.SysObjectProtocol Protokol; try { //strData = ResData.strData; strDataHead = ResData.strHead; String[] arrDataLine = ResData.strData.Split(sepArray.ToCharArray()); foreach (string DataLine in arrDataLine) { strData = DataLine; strItem = ""; foreach (Config.SysObjectProtocolMap Protocol in arrProtocolElement) { /*Если данные*/ if (Protocol.Index > 0) { if (_TermType == "TEM05M") { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); //intStart = Convert.ToInt16(Convert.ToInt32(intStart, 16)) * 2; intStart = intStart * 2; /*if (intStart > 1) intStart = intStart + 2; */ strItem = strData.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "SPT961") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = Data_Hex_Asc(ref strItem); //sResVal = cSpt961.getConvertHexToString(strItem); //sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "TEM104") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = strItem; } else { sResVal = (GetHexToDouble(strItem).ToString()); } } else { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); intStart = intStart * 2; strItem = strDataHead.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } /* Значения кода для выставления запятой */ if (Protocol.Name == "DR1") // Первый канал { Code_D1 = Convert.ToInt16(sResVal); } if (Protocol.Name == "DR2") // Второй канал { Code_D2 = Convert.ToInt16(sResVal); } if (Protocol.Comma == 1) { sResVal = cTem05.GetStrComma(Code_D1, Protocol.Name, sResVal); } if (Protocol.Comma == 2) { sResVal = cTem05.GetStrComma(Code_D2, Protocol.Name, sResVal); } /*@TODO дописать в общем виде*/ /* ДАнные из заголовока*/ if (Protocol.Name == "DOR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } /* ДАнные из заголовока*/ if (Protocol.Name == "WTR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } currVal = currVal + sep + sResVal; } retData = retData + sep + strStatus + currVal + sepArray; currVal = ""; } } catch(Exception e) { strStatus = "4"; } //return "1;1;21:21:08;49;0;0;0;1;11;0;0;4;41;.22955;1.995;16.5179;667.859;755.027;27.147;434.3;2732.36;97429.3;44310.2;0;84.44;28.86;13.21"; return retData ;//= retData + sep + strStatus + currVal; }
/// <summary> /// Обновляет, опрашивает состояние и получает данные с терминала /// </summary> public void Refresh(SPort cPort) { Config cConf = new Config(); Config.SysObjectCommand Sterm; string strResData = ""; string sCommand; String[] arrResData; // Массив ответа String[] arrInfoResp; // Массив Информации String[] arrResPortion; // Массив ответа string FNC; DateTime dtRequest; String[] arrResponce = new string[0]; // Массив порций ответов int i_request = 1; /* * Для прохода по параметрам протокола */ Config.SysObjectProtocol Sprotokol; /* * Получение массива объектов для опроса */ arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName); //arrProtocolCommand = cConf.getObjectProtocol(ProtocolName, _RequestParam.ProtocolIndex); string strCheck = ">"; string retData = ""; try { cPort.CurrentDataMode = SPort.DataMode.Hex; /* * Проходим по набору команд */ cPort.Clear(); int c_count = arrObjectCommand.Count; for (int ia = 0; ia < c_count; ia++) { Sterm = (Config.SysObjectCommand)arrObjectCommand[ia]; //sCommand = Sterm.Value; /* * Если указан индекс, который следует опрашивать * Или индекс не указан */ if (((_RequestParam.ProtocolIndex == 0) && (Sterm.Mode == "auto")) || (_RequestParam.ProtocolIndex == Sterm.Index)) { String Command = Sterm.Value; String[] arrCmd = Command.Split(';'); int c_cmd = 1; if (_RequestParam.ReportType == "period_day") { c_cmd = 12; i_request = 2; } else if (_RequestParam.ReportType == "period_month") { c_cmd = System.DateTime.DaysInMonth(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month); i_request = 2; } arrResponce = new string[c_cmd]; bool flag_cicle = true; for (int iq = 0; iq < c_cmd && flag_cicle; iq++) { for (int iqr = 0; iqr < i_request; iqr++) { if (_RequestParam.ReportType == "period_day") { dtRequest = new DateTime(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month, _RequestParam.DateFrom.Day, iq, 1, 0); _RequestDate = dtRequest; /* Подготовка сообщения */ sCommand = MessagePrepare(Sterm); /* Посылка сообщения */ cPort.SendData(sCommand); } else if (_RequestParam.ReportType == "period_month") { dtRequest = new DateTime(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month, iq+1, 0, 1, 0); _RequestDate = dtRequest; /* Подготовка сообщения */ sCommand = MessagePrepare(Sterm); /* Посылка сообщения */ cPort.SendData(sCommand); } else { /* Подготовка сообщения */ sCommand = MessagePrepare(Sterm); /* Посылка сообщения */ cPort.SendData(sCommand); } Thread.Sleep(_TimeDelay); ResData.strData = cPort.ReturnData(); /* @TODO Временно */ //ResData.strData arrResponce[iq] = "1001101f20100209300936353533320c0938093909323031310931320933330931370c093809390931310930093009300c093709390931310930093009300c09300c09302e350c0937382e380c09302e31313138380c09352e383037370c0931352e373433350c0932340c09300c09302e3030300c1003b832"; /**/ ResData.strDataOriginal = ResData.strData; if (arrResponce[iq].Length >= 2)// && ia == (c_count - 1)) { ResData.IsError = false; //retData = ResData.strData.Substring(0, 2); //retData = Data_Hex_Asc(ref retData); cPort.Clear(); break; } else { ResData.IsError = true; ResData.strData = "0 - Приемник не подключен"; //0 - приёмник; } cPort.Clear(); } // end for попытки // Если ошибка, то прекращаем вообще запросы if (ResData.IsError == true) { flag_cicle = false; Exception myException = new Exception("SPT961 - Ошибка при получении данных."); throw myException; break; } } // end for запросов } } /* * Проверка на готовность ответа порта */ ResData.IsError = false; ResData.strData = ""; //if (ResData.IsError == false) String strResponceLine; // Одна порция данных String res; string ProtocolCommand; int ir = 0; while (ir < arrResponce.Length) { int pos; strResponceLine = arrResponce[ir]; //strResData = ResData.strData; if (strResponceLine.Length > 2) { res = strResponceLine.Replace(" ", "");//.Substring(4); if (res.Length <= 2) { ResData.IsError = true; ResData.strData = "1 - со счетчиком связь отсутствует"; } else { //_TimeWait = Convert.ToInt16(res.Substring(2, 2)) * 500; res = res.Substring(4); if (res.Substring(0, 2) == "FF") { ResData.IsError = true; ResData.strData = "1 - Связь со счетчиком отсутствует."; } else { /* Вычисление позиции старта данных */ //long var1; //byte var2 = 7; //byte var3 = Convert.ToByte(res.Substring(1, 1)); //var1 = (var3 & var2) + (byte)5; //int start = Convert.ToInt16(var1); //int start = Convert.ToInt16(ResData.strData.IndexOf("0c09"))+4; /* Разделяем строку ответа на массивы и вынимаем второй массив - он и есть данные ответа */ arrResData = Regex.Split(strResponceLine.ToUpper(), "0C"); //FNC = arrResData[0] /* Цикл считывания параметров // @TODO Сделать проверку на считываемый код FNC */ // Время показаний if (_RequestParam.ReportType == "period_day") { arrResPortion = Regex.Split(arrResData[1], "09"); strResData = strResData + ";" + arrResPortion[4]; } else if (_RequestParam.ReportType == "period_month") { arrResPortion = Regex.Split(arrResData[1], "09"); strResData = strResData + ";" + arrResPortion[1]; } /*else { arrResPortion = Regex.Split(arrResData[1], "09"); strResData = strResData + ";" + arrResPortion[1] + "." + arrResPortion[2] + "." + arrResPortion[3] + " " + arrResPortion[1] + "." + arrResPortion[1]; }*/ int d_count = arrResData.Length-1; for (int di = 4; di < d_count; di++) { arrResPortion = Regex.Split(arrResData[di], "09"); strResData = strResData + ";" + arrResPortion[1]; } arrInfoResp = Regex.Split(arrResData[1], "09"); //ResData.strData = arrInfoResp[1]; ResData.strHead = arrResData[0]; /* ПРоверка на весь пакет */ if (strResponceLine.Length == 0) { ResData.IsError = true; ResData.strData = "3 - Данные со счетчика не поступают."; } else if (strResponceLine.Length < 4 * 2) { ResData.IsError = true; ResData.strData = "4 - Данные искажены."; } } } //strResData = strResData + ResData.strData; } else { ResData.IsError = true; //ResData.strData = "00"; } ResData.strData = ResData.strData + strResData.Replace(" ", "") + "="; strResData = ""; ir++; } ResData.strData=ResData.strData.TrimEnd('='); //ResData.strData.Substring(0,ResData.strData.Length-2); return; } catch (Exception e) { ResData.IsError = true; ResData.strData = e.Message + ResData.strData; } }
/// <summary> /// Save Log file /// </summary> /// <param name="arrLine"></param> private void LogErrorFileSave(ArrayList arrLine) { string strYear = DateTime.Now.Year.ToString(); string strMonth = DateTime.Now.Month.ToString(); string strDay = DateTime.Now.Day.ToString(); if (arrLine.Count == 0) { return; } Config cConf = new Config(); CFile cLogFile = new CFile(); string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); cLogFile.fileName = DirPath + "/errorTerminal.log"; string sLine; foreach (string Line in arrLine) { sLine = "[" + DateTime.Now.ToUniversalTime().ToString() + "]" + Line; cLogFile.AddLine(sLine); } cLogFile.Write(); }
/// <summary> /// Save Log file /// </summary> /// <param name="arrLine"></param> private void LogFileSave(ArrayList arrLine) { string strYear = DateTime.Now.Year.ToString(); string strMonth = DateTime.Now.Month.ToString(); string strDay = DateTime.Now.Day.ToString(); Config cConf = new Config(); CFile cLogFile = new CFile(); string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString()); cLogFile.fileName = DirPath + "/log_" + strYear + strMonth + strDay + ".txt"; string sLine; foreach (string Line in arrLine) { sLine = "["+DateTime.Now.ToUniversalTime().ToString() + "]" + Line; cLogFile.AddLine(sLine); } cLogFile.Write(); }
/// <summary> /// Обновляет, опрашивает состояние и получает данные с терминала /// </summary> public void Refresh(SPort cPort) { Config cConf = new Config(); Config.SysObjectCommand Sterm; string strResData = ""; string sCommand; String[] arrResData; // Массив ответа String[] arrInfoResp; // Массив Информации /* * Для прохода по параметрам протокола */ Config.SysObjectProtocol Sprotokol; /* * Получение массива объектов для опроса */ arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName); arrProtocolCommand = cConf.getObjectProtocol(ProtocolName); string strCheck = ">"; string retData = ""; try { cPort.CurrentDataMode = SPort.DataMode.Hex; /* * Проходим по набору команд */ cPort.Clear(); int c_count = arrObjectCommand.Count; for (int ia = 0; ia < c_count; ia++) { Sterm = (Config.SysObjectCommand)arrObjectCommand[ia]; sCommand = Sterm.Value; cPort.SendData(sCommand); Thread.Sleep(_TimeDelay); ResData.strData = cPort.ReturnData(); if (ResData.strData.Length >= 2 && ia == (c_count-1)) { retData = ResData.strData.Substring(0, 2); //char c = (char)Convert.ToInt32(retData, 16); retData = Data_Hex_Asc(ref retData); } else { ResData.IsError = true; ResData.strData = "0 - Приемник не подключен"; //0 - приёмник; } } /* * Проверка на готовность ответа порта */ //if (retData == strCheck) if (1 == 1) { string ProtocolCommand; int pos; cPort.Clear(); //int c_count = arrProtocolCommand.Count; ResData.IsError = false; sCommand = ""; foreach (Config.SysObjectProtocolMap Protocol in arrProtocolCommand) { cPort.Clear(); ProtocolCommand = Protocol.Command; //sCommand = MessagePrepare(sCommand); //frmMain.LogErrorFileSave(ProtocolCommand); cPort.SendData(ProtocolCommand); //pos = ProtocolCommand.IndexOf("0c1003"); //sCommand = ProtocolCommand.Substring(17, (pos - 17)); //Thread.Sleep(_TimeDelay); Thread.Sleep(1500); //Thread.Sleep(_TimeWait); /* ТЕст */ /*if (Protocol.Index == 1) { ResData.strData = "1001101f0310020930093030330c093130343031303030303209a12fe00c1003bf85"; } else if (Protocol.Index == 2) { ResData.strData = "1001101f0310020930093039390c093936312e303234333130333209a12fe00c1003cdc5"; } else { ResData.strData = cPort.ReturnData(); }*/ ResData.strData = cPort.ReturnData().Replace(" ", ""); ///retData = retData + sep + Data_Hex_Dec(ref strItem); /*-------------------------------------------*/ // TODO отключил - проверить //if (ResData.strData.Length > 2) //{ // retData = ResData.strData.Substring(0, 2); //} //else //{ // ResData.IsError = true; // ResData.strData = "0 - Данные не поступают"; //0 - приёмник; //} if (ResData.strData.Length > 2) { String res = ResData.strData; res = res.Replace(" ", "");//.Substring(4); if (res.Length <= 2) { ResData.IsError = true; ResData.strData = "1 - со счетчиком связь отсутствует"; } else { //_TimeWait = Convert.ToInt16(res.Substring(2, 2)) * 500; res = res.Substring(4); if (res.Substring(0, 2) == "FF") { ResData.IsError = true; ResData.strData = "1 - Связь со счетчиком отсутствует."; } else { /* Вычисление позиции старта данных */ //long var1; //byte var2 = 7; //byte var3 = Convert.ToByte(res.Substring(1, 1)); //var1 = (var3 & var2) + (byte)5; //int start = Convert.ToInt16(var1); //int start = Convert.ToInt16(ResData.strData.IndexOf("0c09"))+4; arrResData = Regex.Split(ResData.strData, "0C"); arrInfoResp = Regex.Split(arrResData[1], "09"); ResData.strData = arrInfoResp[1]; ResData.strHead = arrResData[0]; /* ПРоверка на весь пакет */ if (ResData.strData.Length == 0) { ResData.IsError = true; ResData.strData = "3 - Данные со счетчика не поступают."; } //@TODO else if (ResData.strData.Length < 4 * 2) { ResData.IsError = true; ResData.strData = "4 - Данные искажены."; } } } strResData = strResData + ResData.strData; } else { ResData.IsError = true; ResData.strData = "00"; break; } } ResData.strData = strResData; return; } } catch (Exception e) { ResData.IsError = true; ResData.strData = e.Message; } }