Стартовая страница › Форумы › Разработка и интеграция › Куда переехали методы и сохранились ли ? v6
- В этой теме 68 ответов, 4 участника, последнее обновление 1 год, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
01.04.2022 в 17:03 #22755manjey73Участник
Михаил, сохранились ли методы, которые были в версии 5 и куда переехали, если сохранились?
CommUtils.AddZeros(CommLineSvc.Number, 3)
Собственно сам AddZeros и что теперь вместо CommLineSvc.Number ?
01.04.2022 в 17:14 #22756manjey73УчастникНу и так же вопрос как теперь со срезами работать
И как работать с Event-ами из драйвера02.04.2022 в 23:38 #22761manjey73Участник2022-04-02 23:31:00 Ошибка при вызове метода Session устройства [2] Mercury23x_82: System.Collections.Generic.KeyNotFoundException: The given key 'Меркурий236_82' was not present in the dictionary.
Раньше было
private MyDevice GetMyDevice() { MyDevice devaddr = CommonProps.ContainsKey(address) ? CommonProps[address] as MyDevice : null; if (devaddr == null) { devaddr = new MyDevice(); if (!CommonProps.ContainsKey(address)) { CommonProps.Add(address, devaddr); } } return devaddr; }
Ну и так далее по коду на счетчик Меркурий 23x, весь код есть на Git
Теперь пытаюсь сделать по аналогии
private MyDevice GetMyDevice() { MyDevice devaddr = LineContext.SharedData.ContainsKey(address) ? // CommonProps.ContainsKey(address) ? LineContext.SharedData[address] as MyDevice : null; if (devaddr == null) { devaddr = new MyDevice(); if (!LineContext.SharedData.ContainsKey(address)) { LineContext.SharedData.Add(address, devaddr); } } return devaddr; }
Но получаю ошибку выше… Так как правильно с новыми способами обходиться по сравнению с вариантами из версии 5 чтобы сохранить данные в общих свойствах, чтобы они
1. Не отображались во вкладке Пользовательские
2. Были доступны между экземплярами драйвера на одной линии связи ?03.04.2022 в 12:15 #22765MikhailМодераторCommUtils.AddZeros(CommLineSvc.Number, 3)
В .NET есть встроенный метод добавить нули впереди. Пример или n.ToString(«D3»)
Ну и так же вопрос как теперь со срезами работать
И как работать с Event-ами из драйвераDeviceData.EnqueueSlice
DeviceData.EnqueueEvent
Примера пока нет.03.04.2022 в 12:18 #22766MikhailМодераторSystem.Collections.Generic.KeyNotFoundException: The given key ‘Меркурий236_82’ was not present in the dictionary.
Ошибка означает, что указанный ключ отсутствует в словаре. Посмотрите в отладчике, что есть в словаре, и чего нет.
03.04.2022 в 14:16 #22767manjey73УчастникИз-за того, что теперь нет OnAddedToCommLine который выполнялся раньше, чем OnCommLineStart и происходят эти проблемы. Но это бы ничего, если бы можно было все из OnCommLineStart перекинуть по быстрому в InitDeviceTags, например в его конец.
Теперь надо понять что в последних двух и в какой последовательности выполняется.
Я перекидывал часть кода в InitDeviceTag и получилось, что общие данные не появились.По Slice и Event можете набросать примеры, чтобы понять, как заменить те, которые были в 5-й версии ?
03.04.2022 в 18:42 #22770manjey73УчастникКак подключиться к процессу, который еще не запущен?
Так как ошибка в самом начале где-то и увидеть в каком из словарей ошибка нет возможности03.04.2022 в 19:41 #22771manjey73УчастникSystem.ArgumentNullException: Value cannot be null. (Parameter ‘key’)
at System.Collections.Generic.Dictionary`
2.FindValue(TKey key)
at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)
at Scada.Comm.Drivers.DrvMercury23x.Logic.DevMercury23xLogic.InitDeviceTags()
at Scada.Comm.Engine.DeviceWrapper.InitDeviceTags()Объясните, как теперь правильно работать с добавлением тегов и разделять их на группы ? Не выходит каменный цветок для драйвера Меркурий 23х
- Этот ответ был изменен 1 год, 12 месяцев назад от manjey73.
04.04.2022 в 09:53 #22774manjey73УчастникОдну ошибку отловил, пришлось воспользоваться Log.WriteLine, расставленные по коду.
Так как подключиться к незапущенному процессу не понял как, если это вообще возможно, а ошибка возникала в самом начале.Вопрос по правильности создания тегов с разделением на группы актуальный, что-то лыжи у меня не едут.
04.04.2022 в 11:50 #22775manjey73УчастникВ симуляторе есть CnlPrototypeFactory но вот не совсем понимаю, как в него передать словарь активных сигналов…
Создал внутри
internal class CnlPrototypeFactory
{
public class ActiveChannel
{
public string Name;
public string Code;
public string CnlType;
}
private ActiveChannel activeChannel;И далее
public static List<CnlPrototypeGroup> GetCnlPrototypeGroups(Dictionary<string, ActiveChannel> activeChannel)Но следующий метод ругается
public static List<CnlPrototype> GetCnlPrototypes()
{
return GetCnlPrototypeGroups().SelectMany(group => group.CnlPrototypes).ToList();
}Отсутствует аргумент, соответствующий требуемому формальному параметру «activeChannel» из «CnlPrototypeFactory.GetCnlPrototypeGroups(Dictionary<string, CnlPrototypeFactory.ActiveChannel>)».
Для чего необходим этот метод ? Gets a flatten list of the channel prototypes.
Как мне передать словарь активных сигналов в CnlPrototypeFactory и там обработать как мне надо ?
Так понимаю мне надо в Shared это запихивать, чтобы был доступ и из Logic и из View
04.04.2022 в 16:38 #22785manjey73УчастникВ DevXXX.Logic не работает код назначения типа канала
deviceTag = tagGroup.AddTag(devTemplate.SndGroups[idgr].value[i].code, Allname);
deviceTag.Cnl.CnlTypeID = CnlTypeID.Input; // deviceTag.Format = TagFormat.FloatNumber;А вот Формат работает. В Dev в принципе нельзя назначить тип канала?
04.04.2022 в 16:44 #22789MikhailМодераторКак подключиться к процессу, который еще не запущен?
Написать, как здесь.
По Slice и Event можете набросать примеры, чтобы понять, как заменить те, которые были в 5-й версии ?
Смогу но только позже. Создаёте объект события или среза через new и вызываете соответствующие методы.
04.04.2022 в 16:47 #22790MikhailМодераторdeviceTag.Cnl — это ссылка на канал из базы.
Чтобы установить тип данных тега, пример по ссылке.Прототипы каналов нужны для работы мастера создания каналов. Вопрос об этом?
04.04.2022 в 16:51 #22792manjey73УчастникДа, лучше через прототипы, но выше написал, не пойму как передать в прототипы свой словарь с каналами, которые будут активны.
В Симуляторе жесткая привязка имен, которая меня не устраивает.
04.04.2022 в 16:55 #22795manjey73УчастникDataType это не то, интересует именно возможность назначения Input, Input/Output, Output
Это возможно только из прототипов ?
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.