// Обработка полученных сигналов от MTS Service private void SubOnNewDiff(SubscriptionStateEventArgs e) { SignalsState diff = e.Diff.Signals; if (diff == null) { return; } foreach (var(Key, Value) in diff) { // Key - номер сигнала // Value - полученное значение сигнала switch (Key) { case 4038: LoadInput(1, Value); break; // Сигнал на загрузку первого загрузочного бункер case 4039: LoadInput(2, Value); break; // Сигнал на загрузку второго загрузочного бункер case 4040: UnloadInput(1, Value); break; // Сигнал на разгрузку первого загрузочного бункер case 4041: UnloadInput(2, Value); break; // Сигнал на разгрузку второго загрузочного бункер case 4014: LoadSilos(1, Value); break; // Сигнал на загрузку первого силоса case 4015: LoadSilos(2, Value); break; // Сигнал на загрузку второго силоса case 4016: LoadSilos(3, Value); break; // Сигнал на загрузку третьего силоса case 4017: LoadSilos(4, Value); break; // Сигнал на загрузку четвертого силоса case 4018: LoadSilos(5, Value); break; // Сигнал на загрузку пятого силоса case 4019: LoadSilos(6, Value); break; // Сигнал на загрузку шестого силоса case 4020: LoadSilos(7, Value); break; // Сигнал на загрузку седьмого силоса case 4021: LoadSilos(8, Value); break; // Сигнал на загрузку восьмого силоса case 4042: SetMaterial(1, Value); break; // Сигнал на выбор материала для первого загрузочного бункера case 4043: SetMaterial(2, Value); break; // Сигнал на выбор материала для второго загрузочного бункера } } }
/// <summary> /// Обработка сигнала при получении его нового значения /// </summary> /// <param name="e">Экземпляр класса MtsConnect.SubscriptionStateEventArgs</param> private void SubOnNewDiff(SubscriptionStateEventArgs e) { string msg; SignalsState diff = e.Diff.Signals; if (diff == null) { return; } foreach (var(key, value) in diff) { string val; if (key == 777) { val = String.Format("{0:f0}", value); } else { val = String.Format("{0:f4}", value); } // Вести локально список сигналов и их значений. Отправлять клиенту только номер одного сигнала и его значения, // если значение изменилось // Проверяем, есть ли полученный сигнал в списке if (sensorsList.ContainsKey(key)) { // Этот сигнал уже есть for (int i = 0; i < sensorsList.Count; ++i) { KeyValuePair <ushort, double> signal = sensorsList.ElementAt(i); // Проверяем его значение if (signal.Key == key && signal.Value != value) { // Если значение изменилось, обновляем его и отсылаем клиенту {Сигнал: Значение} sensorsList[key] = value; string v = value.ToString(); val = val.Replace(',', '.'); msg = "{\"Sensors\":[" + "{\"id\":" + key + "," + "\"value\":" + val + "}" + "]}"; foreach (var client in clients) { client.SendAsync("receive", msg); } } } } else { // Такого сигнала ещё нет sensorsList.Add(key, value); string v = value.ToString(); val = val.Replace(',', '.'); msg = "{\"Sensors\":[" + "{\"id\":" + key + "," + "\"value\":" + val + "}" + "]}"; foreach (var client in clients) { client.SendAsync("receive", msg); } } // sensors.SetValue(key, val.ToString()); // Console.WriteLine("New signal from MTS: {0} = {1}", key, val); // Message = sensors.ToString(); // foreach (var client in clients) // { // client.SendAsync("receive", Message); // } } }