Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public static bool LoadBlind(XmlDocument xml)
        {
            string onstart, time;

            foreach (XmlNode k in xml.SelectNodes("/Apax/Blinds"))
            {
                string loadfile;
                //string pathBlinds;
                //loadfile = XmlExt.GetAttrValue(k,"load");

                //try { loadfile = XmlExt.GetAttrValue(k,"load"); } catch (Exception) { loadfile = @"c:/OPU/blindR.xml"; Util.errorMessage("Предупреждение: отсутствуют настройки вывода на лампочки Blinds ..... Присвоено по умолчанию:  ", loadfile); }
                loadfile = XmlExt.GetAttrValue(k, "load"); if (loadfile == "")
                {
                    loadfile = @"c:/OPU/blindR.xml";
                }


                XmlDocument xmlload = new XmlDocument();
                xmlload.Load(loadfile);
                foreach (XmlNode n in xmlload.SelectNodes("/Blinds/blind")) // считывание состояния вывода состояния на лампочки из конфигурационного файла
                {
                    SmallBlind sBl = new SmallBlind();
                    sBl.nameParamIn  = new List <string>();
                    sBl.nameParamOut = new List <string>();
                    sBl.ups          = new List <bool>();

                    sBl.nameFunction = XmlExt.GetAttrValue(n, "name");
                    //try{ onstart = XmlExt.GetAttrValue(n,"start"); } catch (Exception) { onstart = "true"; }
                    //try { time = XmlExt.GetAttrValue(n,"time"); } catch (Exception) { time = 0; }

                    onstart = XmlExt.GetAttrValue(n, "start"); if (onstart == "")
                    {
                        onstart = "true";                                                        // ?????
                    }
                    time = XmlExt.GetAttrValue(n, "time"); if (time == "")
                    {
                        time = "0";
                    }
                    if (onstart == null)
                    {
                        onstart = "false";
                    }
                    if (time == null)
                    {
                        time = "0";
                    }
                    try
                    {
                        sBl.onstart   = bool.Parse(onstart);
                        sBl.steptimer = int.Parse(time);
                    }
                    catch (Exception)
                    {
                        Util.errorMessage("Ошибка дополнительных параметров ", sBl.nameFunction);
                    }

                    foreach (XmlNode par in n.ChildNodes)
                    {
                        string name, type;

                        name = XmlExt.GetAttrValue(par, "name");
                        type = XmlExt.GetAttrValue(par, "type");
                        if (type == null)
                        {
                            type = "in";
                        }

                        if (type.Equals("in"))
                        {
                            sBl.nameParamIn.Add(name); sBl.ups.Add(false);
                        }
                        else
                        {
                            if (type.Equals("up"))
                            {
                                sBl.nameParamIn.Add(name); sBl.ups.Add(true);
                            }
                            else
                            {
                                sBl.nameParamOut.Add(name);
                            }
                        }
                    }
                    defBlind.Add(sBl);
                }
            }
            return(true);
        }
Exemplo n.º 3
0
        private static void LoadRegistersModBus(string namefile, int icondev, Device dev, Util.TypeDriver drvtype, string Pref) //  функция загрузки регистров Modbus
        {
            XmlDocument regxml = new XmlDocument();

            regxml.Load(namefile);
            DriverModBus driver = (DriverModBus)dev.driver;

            foreach (XmlNode n in regxml.SelectNodes("table/records/record")) // Считывание регистров из указанной подсекции конфигурационного файла
            {
                string name = "", description = "", address = "0", ssize = "1", type = "0", format = "2", unitId = "1";
                foreach (XmlNode m in n.ChildNodes)
                {
                    string attr = XmlExt.GetAttrValue(m, "name"), attr_txt = m.InnerText;

                    switch (attr) //  В зависимости от типа аттрибута, присваивается значение переменной
                    {
                    case "name":
                        name = Pref + attr_txt;
                        break;

                    case "description":
                        description = attr_txt;
                        break;

                    case "address":
                        address = attr_txt;
                        break;

                    case "size":
                        ssize = attr_txt;
                        break;

                    case "type":
                        type = attr_txt;
                        break;

                    case "format":
                        format = attr_txt;
                        break;

                    case "unitId":
                        unitId = attr_txt;
                        break;
                    }
                }
                ushort       size     = ushort.Parse(ssize);
                ushort       iaddress = ushort.Parse(address);
                int          typereg  = int.Parse(type);
                int          iformat  = int.Parse(format);
                Util.TypeVar vtype    = Util.TypeVar.Error;
                if (typereg == 0 || typereg == 1)
                {
                    vtype = Util.TypeVar.Boolean;
                }
                else
                {
                    if (iformat > 0 && iformat <= 7)
                    {
                        vtype = Util.TypeVar.Integer;
                    }
                    if (iformat > 7 && iformat < 11)
                    {
                        vtype = Util.TypeVar.Float;
                    }
                    if (iformat > 10 && iformat < 14)
                    {
                        vtype = Util.TypeVar.Long;
                    }
                    if (iformat > 13 && iformat < 16)
                    {
                        vtype = Util.TypeVar.Double;
                    }
                    if (iformat > 17 && iformat < 20)
                    {
                        vtype = Util.TypeVar.String;
                    }
                }
                /* создаем переменную*/
                Variable.appendVariable(name, description, vtype, size);
                int      ipv = Server.Count - 1;
                Context  con = Server.getContext(ipv);
                Variable var = (Variable)con.defContext;
                if ((typereg == 1 || typereg == 2) && dev.master)
                {
                    var.ReadOnly = true;
                }
                else
                {
                    var.ReadOnly = false;
                }
                var.Device = icondev;
                regModBus regs = new regModBus();
                regs.varcontext = ipv;
                regs.address    = iaddress;
                regs.len        = size;
                regs.regtype    = typereg;
                regs.type       = iformat;
                regs.unitId     = byte.Parse(unitId);
                driver.registers.Add(regs);
                dev.listVariables.Add(ipv);
                Server.setContext(ipv, con);
            }
        }