/// <summary> /// /// </summary> /// <param name="messages"></param> public override void HandleIncomingMessages(NGK.CAN.DataLinkLayer.Message.Frame[] messages) { String msg; IncomingMessageStuctureNodeGuard msghelper; DeviceBase device; if (Status != Status.Running) { return; } foreach (Frame message in messages) { msghelper = IncomingMessageStuctureNodeGuard.Parse(message); if (!msghelper.IsForService) { continue; } if (msghelper.HasIncorrectStructure) { if ((msghelper.DL == 1) && (msghelper.Code == 0)) { // Код состояния с 0 используется протоколом Boot-Up // поэтому данное собщенеие не считаем очибочным. Оно для // сервиса Boot-Up } else { // Формат сообщения неверен. msg = String.Format( "Network {0}: Принято сообщение с неверным форматом данных {1}", _NetworkController.Description, message.ToString()); //_Logger.Error(msg); } continue; } if (!_NetworkController.Devices.Contains(msghelper.CobeId)) { // Устройство не найдено msg = String.Format( "Network {0}: Пришло сообщение от устройства с NodeId {1}, " + "данное устройство не зарегистрировано в сети. Message - {2}", this.NetworkController.Description, msghelper.CobeId, message.ToString()); //Logger.Error(msg); continue; } // Устройство найдено. lock (_SyncRoot) { // Завершаем транзакцию Transaction trns = _Context.FindDevice(msghelper.CobeId).CurrentTransaction; if (trns != null) { trns.Stop(message); // Устанавливаем новый статус устройству _NetworkController.Devices[msghelper.CobeId].Status = ServiceNodeGuard.ToDeviceStatus(msghelper.StatusCode); } else { // Принят ответ в отсутствии запроса throw new Exception(); } } // Пишем в журнал... Не реализовано } }
/// <summary> /// Обновляет данные modbus-файла на основе переданного CAN-устройства /// </summary> /// <param name="modbusDevice"></param> /// <param name="canDevice"></param> private static void UdateDevice( File modbusDevice, NGK.CAN.ApplicationLayer.Network.Devices.DeviceBase canDevice) { NGK.CAN.ApplicationLayer.Network.Devices.DeviceType type = (NGK.CAN.ApplicationLayer.Network.Devices.DeviceType)modbusDevice.Records[ModbusAddresses .ModbusVisitingCard.VisitingCard.DeviceType].Value; switch (type) { case NGK.CAN.ApplicationLayer.Network.Devices.DeviceType.KIP_BATTERY_POWER_v1: { RemappingTableKip9811.Copy(modbusDevice, canDevice); break; } default: { throw new NotSupportedException(); } } }