/// <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> /// Инициализация сетевых сервисов контроллера /// </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; }