Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 83 ответа, 5 участников, последнее обновление 1 год, 2 месяца назад сделано Mikhail.
-
АвторСообщения
-
16.06.2022 в 15:28 #24026RomirosУчастник
Библиотеки идут в составе RapidScada, поэтому не надо их таскать. А так, Вам виднее по Ваши задачи.
17.06.2022 в 00:03 #24029JurasskParkУчастникГлупый вопрос.
В пустой библиотеке, сделал стандартные void, чтобы проверить, как оно работает.
/// <summary>
/// Выполнить действия после добавления КП на линию связи
/// </summary>
public override void OnAddedToCommLine()
{
WriteToLog(«OnAddedToCommLine»);
}/// <summary>
/// Выполнить действия при запуске линии связи
/// </summary>
public override void OnCommLineStart()
{
WriteToLog(«OnCommLineStart»);
}/// <summary>
/// Выполнить действия при завершении работы линии связи
/// </summary>
public override void OnCommLineTerminate()
{
WriteToLog(«OnCommLineTerminate»);
}/// <summary>
/// Выполнить действия при прерывании работы линии связи
/// </summary>
public override void OnCommLineAbort()
{
WriteToLog(«OnCommLineAbort»);
}/// <summary>
/// Выполнить сеанс опроса КП
/// </summary>
public override void Session()
{
WriteToLog(«Session»);
}/// <summary>
/// Выполнить действия после установки соединения
/// </summary>
public override void OnConnectionSet()
{
WriteToLog(«OnConnectionSet»);
}Логи:
2022-06-17 01:57:23 Инициализация линии связи 6 «ODBC»
OnAddedToCommLine
2022-06-17 01:57:23 Запуск линии связи 6 «ODBC»
OnCommLineStart2022-06-17 01:57:23 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено
…
Повторение сообщения о невозможности выполнить сеанс связи.
…2022-06-17 01:57:27 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено
2022-06-17 01:57:27 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено
OnCommLineTerminate2022-06-17 01:57:27 Завершение работы линии связи 6 «ODBC»
———————————————————————————Вопрос, что делает void Session() и какой признак успешности соединения OnConnectionSet()?
И что нужно, чтобы не было сообщения «Невозможно выполнить сеанс связи с КП»? 🙂
P.S. Сильно бить ногами нельзя! 🙂17.06.2022 в 07:28 #24032RomirosУчастникЧто-то типа того.
public override void OnAddedToCommLine()
{
ConnRequired = false;
}Можно в конструкторе логики драйвера выставить. Вообще смотрите KpDbImport. У Вас по сути частичное повторение этого драйвера будет.
17.06.2022 в 08:07 #24033JurasskParkУчастникБольшое спасибо! Я об этом даже как-то забыл! 😅
17.06.2022 в 08:55 #24034JurasskParkУчастникЕще один нюанс, прочитал форум, получается, что в запросе берется первая строка из таблицы. Название столбца — это название тега, значение в нем — значение тега.
И количество столбцов — это количество тегов, что в жизни очень редко бывает.
Поэтому в отличие от KpDBImport, у меня строка — это отдельный тег 🙂17.06.2022 в 10:17 #24039manjey73УчастникВ драйвере Тег это и есть данные сигнала. Если вам часть некоторых не нужна, вы просто не связываете ее с БД системы.
Ну примерно как в групповом запросе Modbus, вам нужны переменные с 0, 3, 7 и 10 тегом но выполнить групповой запрос гораздо быстрее с 0 по 10 чем опрашивать их в отдельности. Просто не связываете с базой те, которые вам не нужны.
Почему у вас в жизни это очень редко бывает? если это лишняя информация, но она вынужденная, так просто не связывайте ее с данными сервера и все.
22.06.2022 в 08:37 #24057JurasskParkУчастникНаписание драйвера в стадии: 75%
Начал проверять логику.
Error executing actions of Device 6 «ODBC» on adding device to communication line: String is not hexadecimal.
На что нужно обратить внимание? Я так понимаю, что я передаю номер устройства, но нигде его не обработал?public KpODBCLogic(int number) : base(number) { //Отключаем проверку сеанса связи ConnRequired = false; ConfigLoad(); } /// <summary> /// Выполнить действия после добавления КП на линию связи /// </summary> public override void OnAddedToCommLine() { WriteToLog("OnAddedToCommLine"); strConfigDir = AppDirs.ConfigDir; intNumber = Number; strFileNamePath = KpConfig.GetFileName(AppDirs.ConfigDir, Number); ConfigLoad(); } /// <summary> /// Выполнить сеанс опроса КП /// </summary> public override void Session() { WriteToLog("Session"); base.Session(); ImportExportData(); }
https://jurasskpark.magicteam.net/tmp/01.png
https://jurasskpark.magicteam.net/tmp/02.png22.06.2022 в 08:42 #24058JurasskParkУчастникВопрос закрыт. 😀
2022-06-22 10:40:38 Сеанс связи с КП 6 «ODBC», тип: KpODBC
Загружаем конфигC:\SCADA\ScadaComm\Config\KpODBC_006.xml
Ошибка при отправке команды БД: System.FormatException: Строка не является 16-ричной записью.
в Scada.ScadaUtils.HexToBytes(String s, Boolean skipWhiteSpace)
в Scada.ScadaUtils.Decrypt(String s, Byte[] secretKey, Byte[] iv)
в Scada.Comm.Devices.KpODBCLogic.InitDataSource(KpConfig config)
в Scada.Comm.Devices.KpODBCLogic.ConfigLoad()
в Scada.Comm.Devices.KpODBCLogic.ImportExportData()Я же забыл, что шифрую через Scada.ScadaUtils и получая строки, через загрузку проекта не расшифровываю сразу как у себя в приложении. 🙂
23.06.2022 в 14:01 #24064JurasskParkУчастникПомогите, пожалуйста!
Я же правильно понимаю, что пока мы не ициницилизировали список тегов, то добавить срез данных нельзя?
Т.е. сначала InitKPTags(tagGroups) , а только потом AddArcSrez(srez)?
Я думал, что можно в SetCurData() указывать время тега… )Можно всё же когда добавляешь в тег в свой список, сразу ему отдавать время?)
23.06.2022 в 14:37 #24066MikhailМодераторТеги инициализируются при добавлении КП на линию связи.
Архивный срез добавляется в сеансе опроса.11.07.2022 в 22:33 #24153JurasskParkУчастникИ снова здравствуйте! 🙂
Вернулся я после отдыха.http://jurasskpark.magicteam.net/tmp/10.png
http://jurasskpark.magicteam.net/tmp/11.png
http://jurasskpark.magicteam.net/tmp/12.pngВ таблице текущих значения я вижу…
А вот в БД у тега 506 с названием TAG1 значения нет… На что стоит обратить внимание?12.07.2022 в 12:58 #24157MikhailМодераторДобрый день!
В таблице Входные каналы сигнал номер 6, а на странице КП всего 4 сигнала.13.07.2022 в 21:36 #24163JurasskParkУчастникМихаил, я всё-таки тупой.
Потому что я номер сигнала указываю, он в таблице в отличие от DBImport не появляется.
Значит нужно меня тыкнуть носом, где идёт связка сигнала (номера) с каналом и я его не сделал. Если не сложно, пожалуйста, скажите, в каком районе или месте происходит проверка на привязку к каналу. 🙂http://jurasskpark.magicteam.net/tmp/13.png
http://jurasskpark.magicteam.net/tmp/14.png
http://jurasskpark.magicteam.net/tmp/15.png
http://jurasskpark.magicteam.net/tmp/16.png
http://jurasskpark.magicteam.net/tmp/17.png
http://jurasskpark.magicteam.net/tmp/18.png14.07.2022 в 14:51 #24166MikhailМодераторПроверьте, что в Коммуникаторе и в параметрах линии и в параметрах КП стоит галочка привязи к серверу. В общих параметрах Коммуникатора также должно быть включено взаимодействие с сервером.
14.07.2022 в 22:22 #24168JurasskParkУчастник/// <summary> /// Gets the default channel prototypes. /// </summary> public override KPCnlPrototypes DefaultCnls { get { // load configuration KpConfig config = new KpConfig(); string fileName = KpConfig.GetFileName(AppDirs.ConfigDir, Number); if (!File.Exists(fileName)) return null; else if (!config.Load(fileName, out string errMsg)) throw new ScadaException(errMsg); // create channel prototypes KPCnlPrototypes prototypes = new KPCnlPrototypes(); string[] tagNames = KpODBCLogic.GetTagNames(config); int signal = 1; foreach (string tagName in tagNames) { prototypes.InCnls.Add(new InCnlPrototype(tagName, BaseValues.CnlTypes.TI) { Signal = signal++ }); } return prototypes; } }
В KPView у меня не было этого.
Но даже добавление не помогло…
А в библиотеке больше нигде упоминание в коде о канале нет… -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.