Стартовая страница › Форумы › Разработка и интеграция › Правила создания каналов R, W, RW в драйвере
- В этой теме 12 ответов, 2 участника, последнее обновление 9 лет назад сделано
manjey73.
-
АвторСообщения
-
10.03.2016 в 21:46 #1641
manjey73
УчастникИнтересуют правила создания каналов чтения, записи, чтения и записи в драйверах устройств.
public KpXXXXLogic(int number) : base(number)
{
List<TagGroup> tagGroups = new List<TagGroup>();
TagGroup tagGroup;
tagGroup = new TagGroup(«Входные каналы:»);
tagGroup.KPTags.Add(new KPTag(1, «Канал 1»));
tagGroups.Add(tagGroup);
InitKPTags(tagGroups);
}
SetCurData(индекс, значение, 1);С чтением вроде понятно, кроме правил привязки индекса к нужному каналу.
Как организовать каналы чтения/записи и записи ?
14.03.2016 в 11:19 #1672Mikhail
МодераторВ драйверах используется терминология тегов и команд вместо каналов.
Индексы тегов начинаются от 0 и далее по порядку. Теги привязываются к каналам базы конфигурации автоматически на основе поля Signal. В большинстве случаев (не всегда) tagIndex = Signal — 1Если Вы отправляете команду КП, то Коммуникатором вызывается метод SendCmd, который Вы должны переопределить.
14.03.2016 в 12:57 #1679manjey73
УчастникТак вот и вопрос, как переопределять SendCmd чтобы он был привязан к номерам сигналов управления.
14.03.2016 в 18:33 #1686Mikhail
МодераторВ метод SendCmd передаётся номер команды, её тип и значение. Далее Вы их обрабатываете так, как нужно в конкретной ситуации.
15.03.2016 в 09:41 #1687manjey73
УчастникМихаил, можно короткий пример как принимать номер команды, тип и значение ?
15.03.2016 в 10:41 #1688Mikhail
МодераторНапример, https://github.com/RapidScada/scada/blob/master/ScadaComm/OpenKPs/KpSnmp/KpSnmpLogic.cs со строки 503.
Проверка типа:
if ((cmd.CmdTypeID == BaseValues.CmdTypes.Standard
Получение номера:
cmd.CmdNum
Получение значения:
cmd.CmdVal
15.03.2016 в 13:38 #1699manjey73
Участникif (cmd.CmdTypeID == BaseValues.CmdTypes.Standard)
{
double can_in = cmd.CmdVal;
int num_com = cmd.CmdNum;Тут формирую массив для отправки в порт
Connection.Write(buf_com, 0, buf_com.Length); //послать запрос в порт
System.Threading.Thread.Sleep(ReqParams.Delay);}
else
{
WriteToLog(CommPhrases.IllegalCommand);
}
CalcCmdStats();Что и где не так ? даже попыток отправки в порт нет, абсолютно ничего. В Коммуникаторе никак не отражается на счетчик отправленных команд, никакого вывода даже в логи нет.
В логах сервера есть «Команда ТУ отменена»
-
Этот ответ был изменен 9 лет назад от
manjey73.
15.03.2016 в 16:40 #1710Mikhail
МодераторЗначит команда не дошла до Коммуникатора. Если Коммуникатор получает команду, то в его логах она выводится. Команда может быть отменена, если формула вернула NaN или null.
15.03.2016 в 16:46 #1711manjey73
УчастникТак формулы нет, используется режим команды Стандартная без формулы и без указания Значения команды.
Должно быть передано вещественное число, которое вводим в поле ввода15.03.2016 в 18:29 #1713Mikhail
МодераторЭто странно, нужно понять причину. Поставьте галочку записи события для канала управления. Затем после отправки команды в таблице событий посмотрите, что будет записано для команды?
16.03.2016 в 13:55 #1722manjey73
УчастникПричина как оказалось несогласованность библиотек сборки (Log.dll, ScadaCommCommon.dll, ScadaData.dll). Дело в том, что собираю на домашнем компе по удаленке, а тестирую на работе. Вот разность версий scada и повлияла.
Остались вопросы по части формирования сообщений в лог и окно Коммуникатора.
В Коммуникаторе на вкладке «Данные КП» не отображается строка «Команды ТУ отсутствуют» и соответственно вывод команды при ее появлении.В строке «Команды ТУ (всего/ошибок) отображается только счетчик «всего».
Какие функции отвечают за дополнительный функционал и как их правильно формировать.
Лучше небольшими примерами кода с комментарием.16.03.2016 в 19:37 #1735Mikhail
МодераторДумаю, для отображения команд поможет код из строки 116
Вы имеете ввиду, что счётчик ошибок не увеличивается?
16.03.2016 в 19:39 #1737manjey73
УчастникДа, при записи параметра в прибор я читаю ответ прибора, и если ответ говорит, что запись не удалась необходимо принять какие-то действия, увеличить счетчик ошибок.
Ну и как-то сообщить scada что увы и ах, запись не удалась. -
Этот ответ был изменен 9 лет назад от
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.