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); } }
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))); // Открываем в новом потоке } }