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); }
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); }
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); } }