private void toolStripButton1_Click(object sender, EventArgs e) // ЗАПУСК ОПРОСА { if (LabelPort.Text != "null") // Проверяем что порт установлен { if (CounterPage.TabCount != 1) { WorkOn = true; // Меняем флаг работы опроса SaveLatestPort.Save(LabelPort.Text); // Сохраняем порт в файл WriteGoodWork(); toolStripButton1.Enabled = false; toolStripButton2.Enabled = true; LabelPort.Enabled = false; NewCounter[] ChildF = new NewCounter[CounterPage.TabCount - 1]; for (int i = 1; i < CounterPage.TabCount; i++) { ChildF[i - 1] = (NewCounter)CounterPage.TabPages[i].Controls[0]; } _Work = new InterrogationСounter(LabelPort.Text); tasks.Add(Task.Factory.StartNew(() => _Work.Request(ChildF, (AmountCounter)CounterPage.TabPages[0].Controls[0]))); } else { MessageBox.Show("Нет счетчиков в очереди на опрос", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { PortProperties(); MessageBox.Show("Проверьте подключение кабеля и соответствие наименования выбранного порта, повторите попытку запуска", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
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))); // Открываем в новом потоке } }
private void Ok_Click(object sender, EventArgs e) // Сохраняем состояние { for (int i = 0; i < 10; i++) { if (Selected[i]) { if (!CheckAvailability(i + 1)) { NewCounter childFrm = new NewCounter((i + 1).ToString(), (frmMain)Owner); _Counters.TabPages.Add(childFrm.Name, childFrm.Text); childFrm.Parent = _Counters.TabPages[_Counters.TabCount - 1]; } } else { if (CheckAvailability(i + 1)) { _Counters.TabPages.RemoveByKey((i + 1).ToString()); } } } Close(); }
private void button1_Click(object sender, EventArgs e) // Кнопка применить { if (checkedListBox.CheckedItems.Count != 0) { try { for (int i = 0; i < checkedListBox.CheckedItems.Count; i++) { Chouse = (NewCounter)_Counters.TabPages[checkedListBox.CheckedIndices[i] + 1].Controls[0]; Chouse.SetSetiings(Double.Parse(textBox1.Text), Double.Parse(textBox2.Text)); } } catch { MessageBox.Show("Проверьте корректность введенных чисел", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Выберите хотя бы один счетчик", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
void AddNewCounter(NewCounter childFrm) // Добавление счетчика на вкладку { CounterPage.TabPages.Add(childFrm.Name, childFrm.Text); childFrm.Parent = CounterPage.TabPages[CounterPage.TabCount - 1]; }