/// <summary> /// Выполнить действия после добавления КП на линию связи /// </summary> public override void OnAddedToCommLine() { // получение или загрузка шаблона устройства string fileName = ReqParams.CmdLine.Trim(); PrepareTemplate(fileName); // инициализация тегов КП на основе шаблона устройства floatSignals = new HashSet <int>(); int tagInd = 0; List <TagGroup> tagGroups = CreateTagGroups(deviceTemplate, ref tagInd); InitKPTags(tagGroups); // определение режима передачи данных transMode = CustomParams.GetEnumParam("TransMode", false, TransMode.RTU); if (deviceTemplate == null) { elemGroups = null; elemGroupCnt = 0; } else { // получение активных групп элементов elemGroups = deviceTemplate.GetActiveElemGroups(); elemGroupCnt = elemGroups.Count; // формирование PDU и ADU devAddr = (byte)Address; foreach (ElemGroup elemGroup in elemGroups) { elemGroup.InitReqPDU(); elemGroup.InitReqADU(devAddr, transMode); } foreach (ModbusCmd cmd in deviceTemplate.Cmds) { cmd.InitReqPDU(); cmd.InitReqADU(devAddr, transMode); } } // определение возможности отправки команд CanSendCmd = deviceTemplate != null && deviceTemplate.Cmds.Count > 0; }
/// <summary> /// Выполнить действия при запуске линии связи /// </summary> public override void OnCommLineStart() { // инициализация запрашиваемых элементов и команд // располагается в OnCommLineStart, т.к. здесь Address окончательно определён if (deviceTemplate == null) { elemGroups = null; elemGroupCnt = 0; } else { // получение активных групп элементов elemGroups = deviceTemplate.GetActiveElemGroups(); elemGroupCnt = elemGroups.Count; // формирование PDU и ADU devAddr = (byte)Address; foreach (ElemGroup elemGroup in elemGroups) { elemGroup.InitReqPDU(); elemGroup.InitReqADU(devAddr, transMode); } foreach (ModbusCmd cmd in deviceTemplate.Cmds) { cmd.InitReqPDU(); cmd.InitReqADU(devAddr, transMode); } } // инициализация объекта для опроса КП InitModbusPoll(); // выбор метода запроса request = modbusPoll.GetRequestMethod(transMode); }
/// <summary> /// Выполнить действия после добавления КП на линию связи /// </summary> public override void OnAddedToCommLine() { // загрузка шаблона устройства deviceTemplate = null; elemGroups = null; elemGroupCnt = 0; floatSignals = new HashSet <int>(); string fileName = ReqParams.CmdLine.Trim(); if (fileName == "") { WriteToLog(string.Format(Localization.UseRussian ? "{0} Ошибка: Не задан шаблон устройства для {1}" : "{0} Error: Template is undefined for the {1}", CommUtils.GetNowDT(), Caption)); } else { Dictionary <string, DeviceTemplate> templates = GetTemplates(); if (templates.ContainsKey(fileName)) { // создание шаблона устройства на основе шаблона, загруженного ранее DeviceTemplate template = templates[fileName]; if (template != null) { deviceTemplate = new DeviceTemplate(); deviceTemplate.CopyFrom(template); } } else { WriteToLog(string.Format(Localization.UseRussian ? "{0} Загрузка шаблона устройства из файла {1}" : "{0} Load device template from file {1}", CommUtils.GetNowDT(), fileName)); DeviceTemplate template = new DeviceTemplate(); string errMsg; if (template.Load(AppDirs.ConfigDir + fileName, out errMsg)) { deviceTemplate = template; templates.Add(fileName, template); } else { WriteToLog(errMsg); templates.Add(fileName, null); } } } if (deviceTemplate != null) { elemGroups = deviceTemplate.GetActiveElemGroups(); elemGroupCnt = elemGroups.Count; } // инициализация тегов КП на основе модели устройства if (deviceTemplate.ElemGroups.Count > 0) { List <TagGroup> tagGroups = new List <TagGroup>(); int tagInd = 0; foreach (ElemGroup elemGroup in deviceTemplate.ElemGroups) { TagGroup tagGroup = new TagGroup(elemGroup.Name); tagGroups.Add(tagGroup); elemGroup.StartKPTagInd = tagInd; foreach (Elem elem in elemGroup.Elems) { int signal = ++tagInd; tagGroup.KPTags.Add(new KPTag(signal, elem.Name)); if (elem.ElemType == ElemTypes.Float) { floatSignals.Add(signal); } } } InitKPTags(tagGroups); CanSendCmd = deviceTemplate.Cmds.Count > 0; } }