Пример #1
0
        public void Inquiry(string IDCounter, NewCounter Current) // Функция запроса тока и напряжения
        {
            try
            {
                AllRequsted = true;
                byte[] ByteMassiv = new byte[5 + IDCounter.Length]; // Формирование первого запроса в зависимости от модели счетчика
                ByteMassiv[0] = 0x2F;
                ByteMassiv[1] = 0x3F;
                for (int j = 2; j < IDCounter.Length + 2; j++)
                {
                    ByteMassiv[j] = (byte)IDCounter[j - 2];
                }

                ByteMassiv[IDCounter.Length + 2] = 0x21;
                ByteMassiv[IDCounter.Length + 3] = 0x0D;
                ByteMassiv[IDCounter.Length + 4] = 0x0A;

                RequestWithoutWrite(ByteMassiv);                                                                                               // Первый запрос
                RequestWithoutWrite(ByteMassiv = new byte[] { 0x06, 0x30, 0x35, 0x31, 0x0D, 0x0A });                                           // Второй запрос
                RequestWithoutWrite(ByteMassiv = new byte[] { 0x01, 0x52, 0x31, 0x02, 0x49, 0x44, 0x45, 0x4E, 0x54, 0x28, 0x29, 0x03, 0x4D }); // Запрос спецификаций счетчика
                RequestWithoutWrite(ByteMassiv = new byte[] { 0x01, 0x52, 0x31, 0x02, 0x53, 0x4E, 0x55, 0x4D, 0x42, 0x28, 0x29, 0x03, 0x5E }); // Третий запрос серийного номера
                RequestWithoutWrite(ByteMassiv = new byte[] { 0x01, 0x52, 0x31, 0x02, 0x49, 0x44, 0x50, 0x41, 0x53, 0x28, 0x29, 0x03, 0x4A }); // запрос идентификатора

                RequestWithWrite(ByteMassiv = new byte[]
                {
                    0x01, 0x52, 0x31, 0x02, 0x43, 0x55, 0x52, 0x52, 0x45, 0x28, 0x29, 0x03, 0x5A
                }, Current, 0); // Четвертый запрос тока
                RequestWithWrite(ByteMassiv = new byte[]
                {
                    0x01, 0x52, 0x31, 0x02, 0x56, 0x4F, 0x4C, 0x54, 0x41, 0x28, 0x29, 0x03, 0x5F
                }, Current, 1); // Пятый запрос напряжения
                RequestWithWrite(ByteMassiv = new byte[]
                {
                    0x01, 0x52, 0x31, 0x02, 0x43, 0x4F, 0x52, 0x49, 0x55, 0x28, 0x29, 0x03, 0x5B
                }, Current, 2);                                           // Запрос косинуса FI

                ByteMassiv = new byte[] { 0x01, 0x42, 0x30, 0x03, 0x75 }; // Шестой запрос прощание
                _serialPort.Write(ByteMassiv, 0, ByteMassiv.Length);
                Thread.Sleep(600);
                ByteMassiv = new byte[_serialPort.ReadBufferSize];
                ByteMassiv = null;
            }
            catch
            {
                DelegateWriteException D1 = Current.WriteException;
                Current.Invoke(D1);
                AllRequsted = false;
                Thread.Sleep(500);
            }
        }
Пример #2
0
        public void RequestWithWrite(byte[] ByteMassiv, NewCounter Current, int CurOrVolOrCos) // Работа опроса с записью результата
        {
            _serialPort.Write(ByteMassiv, 0, ByteMassiv.Length);
            Thread.Sleep(600);
            ByteMassiv = new byte[_serialPort.ReadBufferSize];
            _serialPort.Read(ByteMassiv, 0, ByteMassiv.Length);

            ParseIncomingMessage(System.Text.Encoding.UTF8.GetString(ByteMassiv), CurOrVolOrCos); // Записываем результаты в массив
            DelegateWriteCurAndVol D1 = Current.WriteIndications;

            Current.Invoke(D1, Indications, CurOrVolOrCos);                                                  // Записываем результаты на форму

            if (CurOrVolOrCos == 2)                                                                          // Если это последний запрос, записываем данные в базу данных
            {
                Serialization _WRITE = new Serialization();                                                  // Создаем рабочий класс записи
                Task.Factory.StartNew(() => _WRITE.WriteToDataBase(Indications, Int16.Parse(Current.Name))); // Открываем в новом потоке
            }
        }