예제 #1
0
파일: BuildLoad.cs 프로젝트: zanxi/OPU
        public static bool loads(XmlDocument xml)            // функция загрузки конфигурационного файла OPULeft.xml или OPURight.xml
        {
            XmlNode x = xml.SelectSingleNode("Apax/Server"); // выбор подсекции Server основной секции Apax конфигурационного файла OPULeft.xml или OPURight.xml для считывания значений

            if (x == null)
            {
                return(false);
            }
            Server.InitServer(
                XmlExt.GetAttrValue(x, "name"),
                XmlExt.GetAttrValue(x, "description"),
                XmlExt.GetAttrIntValue(x, "lines"),
                XmlExt.GetAttrIntValue(x, "step"),
                XmlExt.GetAttrIntValue(x, "reconect"),
                XmlExt.GetAttrIntValue(x, "port"),
                XmlExt.GetAttrValue(x, "ip"),
                XmlExt.GetAttrValue(x, "ip2")
                );
            return(true);
        }
예제 #2
0
파일: BuildLoad.cs 프로젝트: zanxi/OPU
        public static bool LoadDevices(XmlDocument xml)                   // функция загрузки конфигурационного файла OPULeft.xml или OPURight.xml
        {
            foreach (XmlNode n in xml.SelectNodes("Apax/Devices/device")) // выбор подподсекции device подподсекции Device основной секции Apax конфигурационного файла OPULeft.xml или OPURight.xml для считывания значений
            {
                string name, description, step;
                int    istep;
                name = XmlExt.GetAttrValue(n, "name");
                string Pref = name + ":";
                description = XmlExt.GetAttrValue(n, "description");

                //try { step = XmlExt.GetAttrValue(n,"step"); }catch (Exception) { step = "0"; }
                step = XmlExt.GetAttrValue(n, "step"); if (step == "")
                {
                    step = "0";
                }

                try
                {
                    istep = int.Parse(step);
                }
                catch (Exception)
                {
                    istep = 0;
                }
                Context condev = new Context(name, description, Util.TypeContext.Devices); // создание назначения/сущности устройства
                Device  dev    = new Device(istep);                                        // создание переменной устройства
                condev.defContext = dev;
                Context devroot = Server.getContext(Server.PointDevices);                  // получение назначения/сущности устройства устройства и запись в переменную контекста
                int     icondev = Server.Count;
                devroot.appendChaild(icondev);
                Server.appendContext(condev);
                Server.setContext(Server.PointDevices, devroot);
                string          stype;
                bool            master = true;
                Util.TypeDriver type   = Util.TypeDriver.NotDriver; // назначен тип отсуствующего драйвера


                stype = XmlExt.GetAttrValue(n, "type"); // считывание типа текущего устройства из конфигурационного файла

                switch (stype)                          // Выбор соотвествующего драйвера в зависимости от типа текущего устройства
                {
                case "ModBusTCPMaster":
                    type = Util.TypeDriver.ModBusTCPMaster; master = true;
                    break;

                case "ModBusTCPSlave":
                    type = Util.TypeDriver.ModBusTCPSlave;
                    break;

                case "ModBusSerialMaster":
                    type = Util.TypeDriver.ModBusSerialMaster; master = true;
                    break;

                case "ModBusSerialSlave":
                    type = Util.TypeDriver.ModBusTCPSlave;
                    break;

                case "ApaxInput":
                    type = Util.TypeDriver.ApaxInput;
                    break;

                case "ApaxOutput":
                    type = Util.TypeDriver.ApaxOutput;
                    break;

                case "RezCanal":
                    type = Util.TypeDriver.RezCanal; master = true;
                    break;

                default:
                    break;
                }


                if (type == Util.TypeDriver.NotDriver)  // если не найден драйвер для устройства, генерируется сообщение и производится выход из обработчика
                {
                    Util.errorMessage("Отсутствует тип драйвера", n.ToString()); return(false);
                }


                dev.type    = type;
                dev.master  = master;
                dev.timeout = XmlExt.GetAttrIntValue(n, "timeout");
                if (type == Util.TypeDriver.ApaxInput || type == Util.TypeDriver.ApaxOutput)
                {
                    if (type == Util.TypeDriver.ApaxInput)
                    {
                        dev.driver = new ApaxInput(icondev);
                    }
                    else
                    {
                        dev.driver = new ApaxOutput(icondev);
                    }


                    string pathLampR;
                    //pathLampR = XmlExt.GetAttrValue(n,"load");
                    // блок генерации исключения если отсутствует параметр load адреса, содержащего путь к конфигурационному файлу LampR.xml - значения лампочек слева или справа, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    //try { pathLampR = XmlExt.GetAttrValue(n,"load"); } catch (Exception) { pathLampR = @"c:/OPU/LampR.xml"; Util.errorMessage("Предупреждение: отсутствуют настройки лампочек справа LampR ..... Присвоено по умолчанию:  ", pathLampR); }
                    pathLampR = XmlExt.GetAttrValue(n, "load"); if (pathLampR == "")
                    {
                        pathLampR = @"c:/OPU/LampR.xml";
                    }

                    LoadRegistersApax(pathLampR, icondev, dev, type); // загрузка значений лампочек в устройство Apax



                    Server.setContext(icondev, condev);
                    continue;
                }
                ModBusDriverParam param = new ModBusDriverParam(); // создание драйвера Modbus

                if (type == Util.TypeDriver.ModBusTCPMaster || type == Util.TypeDriver.ModBusTCPSlave)
                {
                    string TCPIp = "127.0.0.1";                        // блок генерации исключения если отсутствует параметр ip, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    if (type == Util.TypeDriver.ModBusTCPMaster)
                    {
                        //try { TCPIp = XmlExt.GetAttrValue(n,"ip"); } catch (Exception) { TCPIp = "127.0.0.1"; Util.errorMessage("Предупреждение: отсутствует параметр IP. Присвоено по умолчанию: ", "127.0.0.1"); }
                        TCPIp = XmlExt.GetAttrValue(n, "ip"); if (TCPIp == "")
                        {
                            TCPIp = "127.0.0.1";
                        }
                    }
                    param.ip = TCPIp;
                    // блок генерации исключения если отсутствует параметр port, генерируется текстовое предупреждение и присваивается значение по умолчанию

                    //try { param.port = XmlExt.GetAttrIntValue(n,"port")); } catch (Exception) { param.port = 502; Util.errorMessage("Предупреждение: отсутствует параметр Port. Присвоено по умолчанию:  ", 502.ToString()); }
                    param.port = XmlExt.GetAttrIntValue(n, "port"); if (param.port == 0)
                    {
                        param.port = 502;
                    }

                    master = type == Util.TypeDriver.ModBusTCPMaster;
                    Pref   = "";
                }
                if (type == Util.TypeDriver.RezCanal)
                {
                    // блок генерации исключения если отсутствует параметр ip, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    //try { param.ip = XmlExt.GetAttrValue(n,"ip"); } catch (Exception) { param.ip = "192.168.1.171"; Util.errorMessage("Предупреждение: отсутствует параметр IP. Присвоено по умолчанию:  ", "192.168.1.171");  }
                    param.ip = XmlExt.GetAttrValue(n, "ip"); if (param.ip == "")
                    {
                        param.ip = "192.168.10.35";
                    }

                    // блок генерации исключения если отсутствует параметр ipdub, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    //try { param.ipdub = XmlExt.GetAttrValue(n,"ipdub"); } catch (Exception) { param.ipdub = "192.168.1.171"; Util.errorMessage("Предупреждение: отсутствует параметр IPDub. Присвоено по умолчанию:  ", "192.168.1.171"); }
                    param.ipdub = XmlExt.GetAttrValue(n, "ipdub"); if (param.ipdub == "")
                    {
                        param.ipdub = "192.168.10.35";
                    }

                    // блок генерации исключения если отсутствует параметр port, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    //try { param.port = XmlExt.GetAttrIntValue(n,"port")); } catch (Exception) { param.port = 502; Util.errorMessage("Предупреждение: отсутствует параметр Port. Присвоено по умолчанию:  ", 502.ToString()); }
                    param.port = XmlExt.GetAttrIntValue(n, "port"); if (param.port == 0)
                    {
                        param.port = 502;
                    }
                    // блок генерации исключения если отсутствует параметр portdub, генерируется текстовое предупреждение и присваивается значение по умолчанию
                    //try { param.portdub = XmlExt.GetAttrIntValue(n,"portdub")); } catch (Exception) { param.portdub = 502; Util.errorMessage("Предупреждение: отсутствует параметр Port. Присвоено по умолчанию:  ", 502.ToString());  }
                    param.portdub = XmlExt.GetAttrIntValue(n, "portdub"); if (param.portdub == 0)
                    {
                        param.portdub = 502;
                    }


                    //try { } catch (Exception) { Util.errorMessage("Предупреждение: отсутствует параметр ..... Присвоено по умолчанию:  ", 502.ToString());  }

                    master = true;
                }
                if (type == Util.TypeDriver.ModBusSerialMaster || type == Util.TypeDriver.ModBusSerialSlave)
                {
                    string encoding, portname, baudRate, databits, stopbits, parity;
                    //try { } catch (Exception) { Util.errorMessage("Предупреждение: отсутствует параметр ..... Присвоено по умолчанию:  ", 502.ToString()); }
                    // блок генерации исключения если отсутствует параметр ..., генерируется текстовое предупреждение и присваивается значение по умолчанию

                    //try { encoding = XmlExt.GetAttrValue(n,"encoding"); } catch (Exception) { encoding ="RTU"; Util.errorMessage("Предупреждение: отсутствует параметр encoding. Присвоено по умолчанию:  ", "RTU"); }
                    encoding = XmlExt.GetAttrValue(n, "encoding"); if (encoding == "")
                    {
                        encoding = "RTU";
                    }

                    //try { portname = XmlExt.GetAttrValue(n,"portname"); } catch (Exception) { portname ="COM1"; Util.errorMessage("Предупреждение: отсутствует параметр portname. Присвоено по умолчанию:  ", "COM1"); }
                    portname = XmlExt.GetAttrValue(n, "portname"); if (portname == "")
                    {
                        portname = "COM1";
                    }

                    //try { baudRate = XmlExt.GetAttrValue(n,"baudRate"); } catch (Exception) { baudRate = "38400";  Util.errorMessage("Предупреждение: отсутствует параметр baudRate. Присвоено по умолчанию:  ", "19200"); }
                    baudRate = XmlExt.GetAttrValue(n, "baudRate"); if (baudRate == "")
                    {
                        baudRate = "38400";
                    }

                    //try { databits = XmlExt.GetAttrValue(n,"databits"); } catch (Exception) { databits ="8"; Util.errorMessage("Предупреждение: отсутствует параметр databits. Присвоено по умолчанию:  ", "8"); }
                    databits = XmlExt.GetAttrValue(n, "databits"); if (databits == "")
                    {
                        databits = "8";
                    }

                    //try { stopbits = XmlExt.GetAttrValue(n,"stopbits"); } catch (Exception) { stopbits ="1";  Util.errorMessage("Предупреждение: отсутствует параметр stopbits. Присвоено по умолчанию:  ", "1"); }
                    stopbits = XmlExt.GetAttrValue(n, "stopbits"); if (stopbits == "")
                    {
                        stopbits = "1";
                    }

                    //try { parity = XmlExt.GetAttrValue(n,"parity"); } catch (Exception) { parity = "None"; Util.errorMessage("Предупреждение: отсутствует параметр parity. Присвоено по умолчанию:  ", "None"); }
                    parity = XmlExt.GetAttrValue(n, "parity"); if (parity == "")
                    {
                        parity = "None";
                    }

                    //try { } catch (Exception) { Util.errorMessage("Предупреждение: отсутствует параметр ..... Присвоено по умолчанию:  ", 502.ToString()); }

                    param.portname = portname;
                    param.encoding = encoding;
                    param.baudRate = int.Parse(baudRate);
                    param.stopbits = "0".Equals(stopbits) ? StopBits.None:("1".Equals(stopbits) ? StopBits.One : ("2".Equals("2") ? StopBits.Two  : StopBits.OnePointFive));

                    param.parity = Parity.Even;

                    switch (parity) // В зависимости от команды протокола RS-232 устанавливается соотвествующее значение
                    {
                    case "None":
                        param.parity = Parity.None;
                        break;

                    case "Even":
                        param.parity = Parity.Even;
                        break;

                    case "Odd":
                        param.parity = Parity.Odd;
                        break;

                    case "Mark":
                        param.parity = Parity.Mark;
                        break;

                    case "Space":
                        param.parity = Parity.Space;
                        break;
                    }

                    param.databits = int.Parse(databits);
                    master         = type == Util.TypeDriver.ModBusSerialMaster;
                    Pref           = "";
                }
                switch (type) // в зависимости от типа драйвера создается соотвествующий новый драйвер устройства
                {
                case Util.TypeDriver.ModBusTCPMaster:
                    dev.driver = new ModBusTCPMaster(icondev, param);
                    break;

                case Util.TypeDriver.ModBusTCPSlave:
                    dev.driver = new ModBusTCPSlave(icondev, param);
                    break;

                case Util.TypeDriver.ModBusSerialMaster:
                    dev.driver = new ModBusSerialMaster(icondev, param);
                    break;

                case Util.TypeDriver.ModBusSerialSlave:
                    dev.driver = new ModBusSerialSlave(icondev, param);
                    break;

                case Util.TypeDriver.RezCanal:
                    dev.driver = new DubBusTCPMaster(icondev, param);
                    break;
                }
                string pathRegModbus;
                //pathRegModbus = XmlExt.GetAttrValue(n,"load");
                // блок генерации исключения если отсутствует параметр load, генерируется текстовое предупреждение и присваивается значение по умолчанию
                //try { pathRegModbus = XmlExt.GetAttrValue(n,"load"); } catch (Exception) { pathRegModbus = @"c:/OPU/du.xml"; Util.errorMessage("Предупреждение: отсутствуют настройки регистров Modbus du.xml ..... Присвоено по умолчанию:  ", pathRegModbus); }
                pathRegModbus = XmlExt.GetAttrValue(n, "load"); if (pathRegModbus == "")
                {
                    pathRegModbus = @"c:/OPU/du.xml";
                }

                LoadRegistersModBus(pathRegModbus, icondev, dev, type, Pref);
                Server.setContext(icondev, condev);
                continue;
            }
            return(true);
        }