Exemplo n.º 1
0
        /// <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();
                    }
                }
                // Пишем в журнал... Не реализовано
            }
        }
Exemplo n.º 2
0
 /// <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(); }
     }
 }