Стартовая страница › Форумы › Разработка и интеграция › Куда переехали методы и сохранились ли ? v6
- В этой теме 68 ответов, 4 участника, последнее обновление 1 год, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
05.04.2022 в 14:25 #22819MikhailМодератор
Тип канала Input, Output и Calculated относится только к каналам. В теге он отсутствует. По сути все теги являются Input. Отправка команд происходит с помощью метода SendCommand.
Соответственно, задать тип каналов, которые генерируются мастером в Администраторе, можно через прототипы.05.04.2022 в 14:52 #22827manjey73УчастникТо есть прототипы дают возможность не только создать теги при запуске опроса на линии, но как раз и создавать мастером в Администраторе каналов.
Интересует как раз возможность в одном месте (Shared) написать код, чтобы в него передать Список или Словарь с активными переменными в коде Прототипов.
public List<CnlPrototypeGroup> GetCnlPrototypeGroups()
Вот если я уберу отсюда static — будет работать на два фронта? для Dev__.Logic и для Dev___.View ?
Еще вопрос — как определить команду по принципу Строка, Число, Hex строка в коде Dev___.Logic ?
Это и есть DataTag.TypeID ?06.04.2022 в 16:29 #22843RomirosУчастникЧто-то с архивами помощь и правда не помешала.
while (dbDataReader.Read())
{
DateTime sliceDt = dbDataReader.GetDateTime(«DTime»);
DeviceSlice slice = new DeviceSlice(sliceDt, tagGroup.DeviceTags.Count, tagGroup.DeviceTags.Count);
slice.ArchiveMask = 4;
slice.Descr = sliceDt.ToLocalizedString();
int i = 0;
foreach (DeviceTag tag in tagGroup.DeviceTags)
{try
{
int ordinal = dbDataReader.GetOrdinal(tag.Code == «V» ? «Q» : tag.Code);
slice.DeviceTags[i] = tag;
slice.CnlData[i] = DecodeArcTag(dbDataReader[ordinal]);
}
catch (Exception ex)
{
Log.WriteError(tag.Code, ex);
}
i++;
}
DeviceData.EnqueueSlice(slice);
Log.WriteInfo($»{sliceDt}»);
}В статусе КП в списке «Недавние архивные данные» записи появляются, но в базе данные не обновляются. Или я что-то делаю не так, или чего-то не хватает.
06.04.2022 в 16:51 #22848MikhailМодераторТо есть прототипы дают возможность не только создать теги при запуске опроса на линии, но как раз и создавать мастером в Администраторе каналов.
В 1-ю очередь прототипы нужны для мастера создания каналов. В драйвере Симулятор из прототипов создаются теги, чтобы не сократить код.
Интересует как раз возможность в одном месте (Shared) написать код, чтобы в него передать Список или Словарь с активными переменными в коде Прототипов.
Создайте свой объект с прототипами. В методе OnCommLineStart положите его в LineContext.SharedData. Что именно не работает?
как определить команду по принципу Строка, Число, Hex
Когда команда приходит на обработку, срабатывает метод SendCommand. Не совсем понял вопрос.
06.04.2022 в 16:54 #22849MikhailМодераторЧто-то с архивами помощь и правда не помешала.
Код выглядит правильным. У меня сомнение по поводу sliceDt. Требуется время, имеющее Kind = UTC
И ещё не помешает deviceSlice.DeviceNum = номер устройстване нужно, ставится автоматически06.04.2022 в 16:56 #22852RomirosУчастникВ логе коммуникатора:
2022-04-06 16:52:10 [DESKTOP-ASUTP][DESKTOP-ASUTP$][ERR] Источник данных ScadaServer: Ошибка при конвертировании среза от устройства 4:
System.NullReferenceException: Object reference not set to an instance of an object.06.04.2022 в 18:12 #22855MikhailМодераторОшибка в методе ConvertSlice. Если у Вас есть возможность собрать, запустить в режиме отладки и пройти по шагам этот метод в драйвере DrvDsScadaServer, то было бы очень полезно. Хотя бы понять, на какой строчке кода возникает ошибка.
У меня может не воспроизвестись проблема из-за каких-либо нюансов. Если нет возможности попробовать, то буду пытаться получить такую же ошибку.
06.04.2022 в 20:27 #22858RomirosУчастникКонечно буду пробовать. Завтра постараюсь всё это построить, чтобы отследить ошибку.
07.04.2022 в 11:24 #22871manjey73Участниккак определить команду по принципу Строка, Число, Hex
Что непонятного в вопросе? Мы посылаем команду и выбираем Число, Строка, 16-ричные данные
Как в драйвере определить, в каком именно виде пошла отправка команды?
Раньше было Standard и Binary — как теперь? При этом раньше можно было задать тип команд из драйвера при создании каналов в Администраторе, а как теперь задать тип команд для тех или иных каналов?07.04.2022 в 15:13 #22878MikhailМодераторВ зависимости от кода или номера команды драйвер должен её обрабатывать определённым образом — либо использовать числовое значение, либо данные.
07.04.2022 в 15:57 #22884manjey73УчастникЯ не могу оперировать номером команды или кодом. Подобным образом можно оперировать только с четко обозначенными запросами в драйвере, когда все каналы статические.
При организации драйверов для ПЛК, или протоколов использование номера или кода НЕВОЗМОЖНО в принципе.
Есть возможность определить в каком виде отправляется команда в коде Коммуникатора, когда мы выбираем
Число, Строка или 16-ричное значение ? или такой возможности нет в принципе?Что можно использовать в данном случае вместо этого?
07.04.2022 в 16:50 #22885MikhailМодераторТогда для команды можно проверить
double.IsNaN(cmd.CmdVal) — значит числовое значение команды отсутствует
cmd.CmdData == null || cmd.CmdData.Length == 0 — данные команды отсутствуютСсылка на пример создания срезов и событий.
Ошибка при конвертировании среза, к сожалению, не воспроизвелась на простом примере.
07.04.2022 в 16:56 #2288607.04.2022 в 17:13 #22887RomirosУчастникBetta v3. Подключиться к проекту у меня получилось, но точки останова не срабатывают. Сегодня и времени особо не было. Ошибку с конвертирование среза я устранил, путем правильного именования кода тега. Хотя по идее метод сам должен был выкинуть тег с каналом null, судя по коду. В общем,нужно дебажить, чтобы понять как он проскочил.
По поводу примера с архивами. Я так и писал. Архивная маска влияет на то, в какой срез будет записано? На windows я записал в часовой срез, а на linux с тем же кодом в минутный. Разное поведение на разных платформах.
Завтра буду смотреть архивы утилитами. Пока ничего не понятно :). Надо на свежую голову всё проверить.07.04.2022 в 17:41 #22890MikhailМодераторКак нужно неправильно указать код тега, чтобы возникла ошибка при конвертировании?
Если при создании DeviceSlice не указывать маску архивов, то она будет определена на основе свойств каналов. Если указать, то запишет в указанные архивы. Но конечно нужно всё проверять на практике.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.