public bool CanAddRoutingMapElement(DeviceRoutingTableElement element) { bool retCode = true; ValidationErrorList.Clear(); if (element.RouteTo > _device.Configuration.HeaderFields.DeviceUserRegistersCount - 1) { ValidationErrorList.Add(String.Format("Целевой регистр за пределами области пользовательских регистров: 0..{0}", _device.Configuration.HeaderFields.DeviceUserRegistersCount - 1)); retCode = false; } for (int route = 0; route < _device.RoutingMap.Count; route++) { if (element.RouteTo == _device.RoutingMap[route].RouteTo) { ValidationErrorList.Add(String.Format("Наложение целевого регистра маршрута с маршрутом №{0}", route + 1)); retCode = false; } } for (int port = 0; port < _device.Configuration.ModbusMasterQueriesOnUartPorts.Count; port++) { for (int query = 0; query < _device.Configuration.ModbusMasterQueriesOnUartPorts[port].Count; query++) { if (_device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].QueryConfigured) { if ((element.RouteTo >= _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RouteStartAddress) && (element.RouteTo < _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RouteStartAddress + _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RegistersCount)) { ValidationErrorList.Add( String.Format( "Наложение целевого регистра с запросом Modbus master: порт № {0}, запрос № {1}", port + 1, query + 1)); retCode = false; } if (element.RouteTo == _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].QueryStatusAddress) { ValidationErrorList.Add( String.Format( "Наложение целевого регистра со статусом запроса Modbus master: порт № {0}, запрос № {1}", port + 1, query + 1)); retCode = false; } } } } return retCode; }
public bool ValidateRoutingMapElement(DeviceRoutingTableElement element) { ValidationErrorList.Clear(); bool retCode = true; if (element.RouteTo == element.RouteFrom) { ValidationErrorList.Add("Целевой регистр совпадает с регистром источником"); retCode = false; } if (element.RouteTo < Definitions.USER_REGISTERS_OFFSET || element.RouteTo > Definitions.USER_REGISTERS_OFFSET+_device.Configuration.HeaderFields.DeviceUserRegistersCount - 1) { ValidationErrorList.Add(String.Format("Целевой регистр за пределами области пользовательских регистров: {0}..{1}", Definitions.USER_REGISTERS_OFFSET, Definitions.USER_REGISTERS_OFFSET+_device.Configuration.HeaderFields.DeviceUserRegistersCount - 1)); retCode = false; } for (int route = 0; route < _device.RoutingMap.Count; route++) { if (element.RouteTo == _device.RoutingMap[route].RouteTo && element != _device.RoutingMap[route] && _device.RoutingMap[route].RouteConfigured) { ValidationErrorList.Add(String.Format("Наложение целевого регистра маршрута с маршрутом №{0}", route + 1)); retCode = false; } if (element.RouteFrom == _device.RoutingMap[route].RouteTo && element.RouteTo == _device.RoutingMap[route].RouteFrom && element != _device.RoutingMap[route]) { ValidationErrorList.Add(String.Format("Зацикливание маршрута с маршрутом №{0}", route + 1)); retCode = false; } } for (int port = 0; port < _device.Configuration.ModbusMasterQueriesOnUartPorts.Count; port++) { if (_device.Configuration.UartPorts[port].PortProtocolType != Definitions.MODBUS_MASTER_PROTOCOL) continue; for (int query = 0; query < _device.Configuration.ModbusMasterQueriesOnUartPorts[port].Count; query++) { if (_device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].QueryConfigured) { if ((element.RouteTo >= _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RouteStartAddress) && (element.RouteTo < _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RouteStartAddress + _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].RegistersCount)) { ValidationErrorList.Add( String.Format( "Наложение целевого регистра с запросом Modbus master: порт № {0}, запрос № {1}", port + 1, query + 1)); retCode = false; } if (element.RouteTo == _device.Configuration.ModbusMasterQueriesOnUartPorts[port][query].QueryStatusAddress) { ValidationErrorList.Add( String.Format( "Наложение целевого регистра со статусом запроса Modbus master: порт № {0}, запрос № {1}", port + 1, query + 1)); retCode = false; } } } } return retCode; }
private void AddRouteCommandExecute(object sender, ExecutedRoutedEventArgs e) { DeviceRoutingTableElement addedElement = new DeviceRoutingTableElement(); SelectedDevice.RoutingMap.Add(addedElement); RoutingMapGrid.ScrollIntoView(SelectedDevice.RoutingMap.Last()); //RoutingMapGrid.RowValidationRules[0].Validate(addedElement,CultureInfo.CurrentCulture); }