Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 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);
 }