Beispiel #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();
                    }
                }
                // Пишем в журнал... Не реализовано
            }
        }
Beispiel #2
0
        /// <summary>
        /// Инициализация сетевых сервисов контроллера
        /// </summary>
        private void InitNetworkServices()
        {
            Service service;

            // Инициализируем список сетевых сервисов
            this._NetworkServices = new NetworkServicesCollection(this);

            service = new ServiceBootUp(this);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServiceNodeGuard(this);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServiceNmt(this);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServiceSdoUpload(this);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServicePdoTransmit(this);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServiceSync(this, 5000);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            service = new ServicePdoReceive(this, 5);
            service.TotalAttempts = this.TotalAttempts;
            this._NetworkServices.Add(service);

            //service = new ServiceEmcy(this);
            //service.TotalAttempts = this.TotalAttempts;
            //this._NetworkServices.Add(service);

            return;
        }