private bool InitDevice(SPort cPort) { cPort.CurrentDataMode = SPort.DataMode.Hex; cPort.Clear(); cPort.SendData("5500FF000000AB"); Thread.Sleep(_TimeWait); string strData = cPort.ReturnData(); //return true; return(CheckMessage(strData)); }
private bool TimeDevice(SPort cPort) { string resData; cPort.CurrentDataMode = SPort.DataMode.Hex; cPort.Clear(); string setData = MessagePrepare("0F02020008"); cPort.SendData(setData); Thread.Sleep(_TimeWait); //resData = "AA00FF0F020845281503270313403B"; resData = cPort.ReturnData(); if (CheckMessage(resData)) { ResData.strTime = getDateTime(resData); return(true); } else { return(false); }; }
/// <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> /// Обновляет, опрашивает состояние и получает данные с терминала /// </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; } }
private bool TimeDevice(SPort cPort) { string resData; cPort.CurrentDataMode = SPort.DataMode.Hex; cPort.Clear(); string setData = MessagePrepare("0F02020008"); cPort.SendData(setData); Thread.Sleep(_TimeWait); //resData = "AA00FF0F020845281503270313403B"; resData = cPort.ReturnData(); if (CheckMessage(resData)) { ResData.strTime = getDateTime(resData); return true; } else { return false; }; }
private bool InitDevice(SPort cPort) { cPort.CurrentDataMode = SPort.DataMode.Hex; cPort.Clear(); cPort.SendData("5500FF000000AB"); Thread.Sleep(_TimeWait); string strData = cPort.ReturnData(); //return true; return CheckMessage(strData); }
/// <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> public void Refresh(SPort cPort) { string strCheck = ">"; string retData = ""; try { cPort.Clear(); cPort.CurrentDataMode = SPort.DataMode.Hex; cPort.SendData("64"); Thread.Sleep(_TimeDelay); ResData.strData = cPort.ReturnData(); if (ResData.strData.Length >= 2) { 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) { cPort.SendData(_TermId.ToString("x")); // TODO отключил - проверить Thread.Sleep(_TimeWait); ResData.IsError = false; retData = cPort.ReturnData().Substring(0, 2); if (retData == "3E") { String res = cPort.ReturnData(); res = res.Replace(" ", "");//.Substring(4); if (res.Length <= 2) { ResData.IsError = true; ResData.strData = "1 - со счетчиком связь отсутствует"; } else if (res.Substring(2, 2) == "3E") { ResData.IsError = true; ResData.strData = "2 - Удаленный терминал не отвечает;"; } 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); ResData.strData = res.Substring(start * 2); ResData.strHead = res.Substring(0, start * 2); /* ПРоверка на весь пакет */ 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 - Данные искажены."; } } } } else if (retData.Substring(0, 2) == "00") { ResData.IsError = true; ResData.strData = "00"; } return; } } catch (Exception e) { ResData.IsError = true; } }
/// <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; } }
/// <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> 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; } }