Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 24 ответа, 4 участника, последнее обновление 1 неделя, 1 день назад сделано
Mikhail.
-
АвторСообщения
-
16.06.2022 в 15:28 #24026
Romiros
УчастникБиблиотеки идут в составе 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
МодераторТеги инициализируются при добавлении КП на линию связи.
Архивный срез добавляется в сеансе опроса. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.