Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 83 ответа, 5 участников, последнее обновление 1 год, 2 месяца назад сделано Mikhail.
-
АвторСообщения
-
31.08.2022 в 23:44 #24711JurasskParkУчастник
Мне нужна помощь! Ничего нового. 😀
Скажу честно, в v5, я команды не трогал и оставлял как есть.
Но т.к. в v6 я код переношу и правлю, то решил проверить работает отправка команд или нет.
И на любую отправку команд — система пишет неизвестная команда. Решил проверить на драйвере Simulator — тоже самое.Хотя у симулятора есть обработка команд
/// <summary> /// Sends the telecontrol command. /// </summary> public override void SendCommand(TeleCommand cmd) { base.SendCommand(cmd); if (cmd.CmdCode == TagCode.DO || cmd.CmdNum == 4) { double relayVal = cmd.CmdVal > 0 ? 1 : 0; Log.WriteLine(Locale.IsRussian ? "Установить состояние реле в {0}" : "Set the relay state to {0}", relayVal); DeviceData.Set(TagCode.DO, relayVal); } else if (cmd.CmdCode == TagCode.AO || cmd.CmdNum == 5) { Log.WriteLine(Locale.IsRussian ? "Установить аналоговый выход в {0}" : "Set the analog output to {0}", cmd.CmdVal); DeviceData.Set(TagCode.AO, cmd.CmdVal); } else if (cmd.CmdCode == "Hist") { // demonstrate how to create a historical data slice DateTime now = DateTime.UtcNow; DeviceSlice deviceSlice = new DeviceSlice( new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, DateTimeKind.Utc), 1, 1); deviceSlice.DeviceTags[0] = DeviceTags[TagCode.Sin]; deviceSlice.CnlData[0] = new CnlData(cmd.CmdVal, CnlStatusID.Defined); deviceSlice.Descr = "Demo slice"; DeviceData.EnqueueSlice(deviceSlice); } else if (cmd.CmdCode == "Event") { // demonstrate how to create an event DeviceData.EnqueueEvent(new DeviceEvent(DeviceTags[TagCode.Sin]) { Timestamp = DateTime.UtcNow, CnlVal = cmd.CmdVal, CnlStat = CnlStatusID.Defined, Descr = "Demo event" }); } else { LastRequestOK = false; Log.WriteLine(CommPhrases.InvalidCommand); } FinishCommand(); }
Но почему он тоже пишет неизвестная команда??? При этом команды же логируются.
Вот видео: https://www.youtube.com/watch?v=U2YMGhvOUy0
Михаил, подскажите, пожалуйста, как и где глубоко копать. 🙂Код отправки команд, который я почти не трогал.
public override void SendCommand(TeleCommand cmd) { base.SendCommand(cmd); Log.WriteLine("cmd " + cmd.CmdCode); try { if (CanSendCommands) { LastRequestOK = false; if ((cmd.CmdCode == "SendStr" || cmd.CmdCode == "SendBin") && (dataSource.ExportCommands.TryGetValue(cmd.CmdNum, out DbCommand dbCommand) || dataSource.ExportCommands.TryGetValue(0, out dbCommand))) { if (ValidateDataSource() && ValidateCommand(dbCommand)) { dataSource.SetCmdParam(dbCommand, "cmdVal", cmd.CmdCode == "SendStr" ? (object)cmd.CmdVal : cmd.GetCmdDataString()); dataSource.SetCmdParam(dbCommand, "cmdNum", cmd.CmdNum); int tryNum = 0; while (RequestNeeded(ref tryNum)) { if (Connect() && SendDbCommand(dbCommand)) LastRequestOK = true; Disconnect(); FinishRequest(); tryNum++; } } } else { Log.WriteLine(CommPhrases.InvalidCommand); } } } catch (Exception ex) { Log.WriteLine(ex.ToString()); } FinishCommand(); } /// <summary> /// Sends the command to the database. /// </summary> private bool SendDbCommand(DbCommand dbCommand) { try { Log.WriteLine(Locale.IsRussian ? "Запрос на изменение данных" : "Data modification request"); dbCommand.ExecuteNonQuery(); return true; } catch (Exception ex) { Log.WriteLine(string.Format(Locale.IsRussian ? "Ошибка при отправке команды БД: {0}" : "Error sending command to the database: {0}", ex.Message)); return false; } }
01.09.2022 в 00:08 #24713JurasskParkУчастникВопрос закрыт. Надо код команды указывать. 🙂
01.09.2022 в 00:19 #24714manjey73УчастникЕсли вы подаете команду из Коммуникатора то так и есть, отправляется или Номер или Код. Если в драйвере не используется Номер то соответственно будет ошибка.
Из самой Scada вроде происходит сопоставление Номеру Кода команды
01.09.2022 в 00:21 #24715JurasskParkУчастникСпасибо большое за помощь и ответ! 🙂
04.09.2022 в 14:43 #24753JurasskParkУчастникНовое видео https://www.youtube.com/watch?v=YysMbwIxhwE
04.09.2022 в 16:11 #24755JurasskParkУчастник05.09.2022 в 10:04 #24782MikhailМодераторСпасибо! Добавлю в репозиторий модулей.
05.09.2022 в 11:06 #24790MitrichУчастникПросьба для v.5 в архиве KpDbImportPlus_5.1.1.0_Release.zip разложить файлы в требуемых каталогах (SCADA\ScadaComm и т.п.), а не общей кучей, если не сложно.
05.09.2022 в 11:08 #24792JurasskParkУчастникНе сложно, я об этом думал вчера. Но времени не хватило. Сделаю, когда прийду с работы 🙂
05.09.2022 в 19:16 #24807JurasskParkУчастникhttps://github.com/JurasskPark/RapidScada_v5/releases/tag/v5.1.1.1
Опубликовал новую версию, где разложил по папкам и небольшую недоработку подправил 🙂05.11.2022 в 17:40 #25850JurasskParkУчастникОбновил драйвер до 6.0.0.1
https://raw.githubusercontent.com/JurasskPark/RapidScada_v6/master/OpenDrivers/Source/DrvDbImportPlus_005.pngГлавная ошибка была в том, если значение в таблице (строка пропадала из результатов), то все теги после пропавшего КП (он же тег, он же канал) поднимались вверх и писали в другом номер.
+ если пропадает связь, то последнее значение писалось, сейчас идёт проверка, что если в результате нет этого канала (тега), то статус и значение пишем 0.07.11.2022 в 11:11 #25880MikhailМодераторЭто хорошая новость 🙂
13.11.2022 в 16:58 #25980JurasskParkУчастникОбновил драйвер до 6.0.0.2
https://github.com/JurasskPark/RapidScada_v6/releases/tag/v6.0.0.2Убрано ограничение на количество тегов с 100 до 65535. 🙂
14.11.2022 в 10:46 #25989MikhailМодераторВ репозитории ссылка на все релизы, поэтому ссылка остаётся актуальной.
24.12.2022 в 19:19 #26840JurasskParkУчастникКороче, продолжение темы https://forum.rapidscada.ru/?topic=server-data-source#post-26832
Как Михаил исторические данные передаёт
https://github.com/RapidScada/scada-v6/blob/cf5fa41dd5a7b67a7c50073387f67e7d356ea40d/ScadaComm/OpenDrivers/DrvDsScadaServer.Logic/ScadaServerDSL.cs#L267
https://github.com/RapidScada/scada-v6/blob/cf5fa41dd5a7b67a7c50073387f67e7d356ea40d/ScadaComm/OpenDrivers/DrvDsScadaServer.Logic/ScadaServerDSL.cs#L354Если коротко, то Михаил из многих «срезов» делает один и записывает его в БД.
А я для каждого тега тиражирую по их количеству.Надо исправлять. 🙂
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.