Example #1
0
        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));
        }
Example #2
0
        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);
            };
        }
Example #3
0
        /// <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;
            }
        }
Example #4
0
        /// <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;
            }
        }
Example #5
0
        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;
            };
        }
Example #6
0
        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);
        }
Example #7
0
        /// <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;
        }
Example #8
0
        /// <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;
            }
        }
Example #9
0
        /// <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;
            }
        }
Example #10
0
        /// <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;
            }
        }
Example #11
0
        /// <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;
        }
Example #12
0
        /// <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;
            }
        }