Стартовая страница › Форумы › Разработка и интеграция › Теги в драйверах устройств с пропусками
- В этой теме 18 ответов, 2 участника, последнее обновление 7 лет, 1 месяц назад сделано manjey73.
-
АвторСообщения
-
20.01.2017 в 16:32 #4178manjey73Участник
Собственно, если будет запись вида
tagGroup.KPTags.Add(new KPTag(39, «Сумма R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(40, «Тариф 1 R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(41, «Тариф 2 R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(42, «Тариф 3 R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(43, «Тариф 4 R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(44, «Потери R+, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(45, «Сумма R-, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(46, «Тариф 1 R-, (кВт*ч)»));
tagGroup.KPTags.Add(new KPTag(47, «Тариф 2 R-, (кВт*ч)»));То, что зачеркнул будет удалено или по условию выключено, как будут восприниматься теги 45, 46, 47 в SetCurData(x, значение, 1).
x будет соответствовать 45, 46, 47 ? ну соответственно 45-1, 46-1, 47-1 И собственно можно нумеровать теги как попало ?
А то хочется скрывать простыню тегов из Коммуникатора, но не хочется чтобы менялись номера, чтобы в любой момент можно было начать чтение параметра или его отключить…20.01.2017 в 19:17 #4179MikhailМодераторПо идее, должно работать. Например, в KpOpc номера тегов могут быть произвольными. В будущем хотелось бы сделать строковые ключи тегов, чтобы не зависеть от смещения номеров.
20.01.2017 в 19:18 #4180MikhailМодераторКстати, в KpModbus можно отключать теги.
20.01.2017 в 22:53 #4183manjey73УчастникОтключая теги мы не можем вернуться к первоначальному варианту. в KpModbus же они генерируются исходя из шаблона.
Я делал в одном драйвере последовательность отключения, а вот разрывы не помню.Интересует больше реакция именно SetCurData, он привязывается к номеру с -1 или он четко записи последовательно выбирает и у него своя последовательная нумерация ?
и если я скрою 3 тега у него уже будет нумерация х-3 вместо х-1 ?20.01.2017 в 23:45 #4184manjey73УчастникВсе, я вспомнил, SetCurData по записям списка, и если мы его скрываем, то нумерация у нас съезжает…
21.01.2017 в 09:41 #4188MikhailМодераторНужно смотреть в коде и в отладчике в процессе работы. В любом случае, большинство методов для КП виртуальные и их можно переопределить.
21.01.2017 в 11:26 #4190manjey73УчастникПокопался в своем старом драйвере, вроде это как-то обошел, при скрытии или открытии списка.
Из меня программист еще тот, с чтением параметров из файла сразу в настройки Коммуникатора я так и не разобрался, а KpModbus для меня трудно понимаем.
Я программирую на уровне Если то, то это…. чтобы понятнее было.Вот например в C# есть функция Encoding.ASCII.ToString(byte[]) вот на данном этапе мне все равно как работает внутри эта функция, каким образом она все это преобразует и т.д. мне достаточно что она возвращает мне то, что мне нужно.
Такой же темный лес для меня попытка разобраться с KpModbus.Из-за этого у меня несколько драйверов зависли в состоянии недоделок.
Максимум что могу, это использовать Командную строку для ввода параметров, но это немного не кошерно.Вот банально простой пример с небольшим описанием в разделе «Для разработчиков» помог бы. Не привязанный к какому-то механизму динамического создания переменных, как это в KpModbus реализовано. То есть имеем набор статических переменных, которые нужно записать в файл при помощи формы или руками и они попадут куда надо и правильно будут взаимодействовать с Коммуникатором.
01.02.2017 в 12:28 #4273manjey73УчастникПример кода
public KpMercury23xLogic(int number) : base(number)
{Как здесь считать параметр из командной строки ? На данный момент просто параметр прописываю в
public sealed class KpMercury23xLogic : KPLogic
{
Тут переменная mask_g1 = нужное мне, что должно считаться из командной строки
}if (mgn_znac != 0)
{
tagGroup = new TagGroup(«Мгновенные значения:»);bool mgn_P = GetBit(mask_g1, 0);
if (mgn_P)
{
tagGroup.KPTags.Add(new KPTag(1, «Мощность P Сумм (Вт)»));
tagGroup.KPTags.Add(new KPTag(2, «Мощность P L1 (Вт)»));
tagGroup.KPTags.Add(new KPTag(3, «Мощность P L2 (Вт)»));
tagGroup.KPTags.Add(new KPTag(4, «Мощность P L3 (Вт)»));
}
…….01.02.2017 в 12:44 #4274manjey73Участникpublic static string ss()
{
string ss = ReqParams.CmdLine.Trim();
return ss;
}Если записать так, то ругается на ReqParams — Для нестатического поля, метода или свойства «KPLogic.ReqParams» требуется ссылка на объект.
Нужно как-то вычитать именно до создания таблицы…
01.02.2017 в 13:15 #4275MikhailМодераторКомандная строка начинает быть доступной в методе OnAddedToCommLine. Пример: https://github.com/RapidScada/scada/blob/master/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs#L272
Здесь же можно создать теги КП.
01.02.2017 в 13:18 #4276manjey73УчастникА не совсем програмистким языком ?
Возможно из Командной строки получить переменную до создания Списка тегов ?
Или я просто потеряю время ?public KpMercury23xLogic(int number) : base(number)
{string ss = ReqParams.CmdLine.Trim();
То есть здесь, нет никакой ругани на ошибку, что что-то недоступно, но при этом нет и чтения переменной.
- Этот ответ был изменен 7 лет, 1 месяц назад от manjey73.
01.02.2017 в 13:21 #4278MikhailМодераторВозможно создание списка тегов отодвинуть немного позже — в то место драйвера, когда командная строка уже доступна. Напишите отдельный метод, который создаёт теги. А затем вызовите его из Вашего метода OnAddedToCommLine — его нужно добавить по аналогии с примером.
01.02.2017 в 13:22 #4281MikhailМодераторМогу научить Вас проходить Ваш код драйвера по шагам из отладчика — весьма полезно. Если интересно, заведите отдельную тему.
01.02.2017 в 13:24 #4283manjey73УчастникЯ оперирую примером драйверов согласно темы «Для разработчиков» на сайте. Не совсем понимаю куда и что надо запихать, чтобы это сработало.
Сам счетчик прекрасно читаю, но вот с тегами какая-то засада. Думал это будет попроще 🙂На счет отладчика было бы полезно. Тут проблема в другом, что для меня чужой код это темный лес, где, что, куда, зачем практически ничего не понятно.
- Этот ответ был изменен 7 лет, 1 месяц назад от manjey73.
01.02.2017 в 14:14 #4285manjey73УчастникПереместил весь список тегов после
public override void Session()
{Теперь работает опрос тегов исходя из переменной, введенной в Командную строку.
Пока так сойдет. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.