Просмотр полной версии : CmpSysExec
Здравствуйте!
Проблема в библиотеке CmpSysExec. При вызове любого ФБ из ее состава возвращает код ошибки - 1. Где взять расшифровку кодов ошибок?
Причем раньше все работало и вдруг перестало.
код такого плана:
Объявление:
fbCmpSysExec: CmpSysExec.sysExecute3;
Выполнение:
fbCmpSysExec(xExecute := TRUE, sCommand := 'ls');
Евгений Кислов
16.11.2022, 08:12
Здравствуйте!
Проблема в библиотеке CmpSysExec. При вызове любого ФБ из ее состава возвращает код ошибки - 1. Где взять расшифровку кодов ошибок?
Причем раньше все работало и вдруг перестало.
код такого плана:
Объявление:
fbCmpSysExec: CmpSysExec.sysExecute3;
Выполнение:
fbCmpSysExec(xExecute := TRUE, sCommand := 'ls');
Добрый день.
Этот код возвращается, если превышено допустимое число одновременно вызываемых экземпляров блоков библиотеки (9).
Т.е., например, если у вас в проекте 4 экземпляра sysExecute3 и 5 экземпляров sysExecute4, и в конкретный момент времени все они вызваны с xExecute := TRUE - то при попытке вызова 10-го экземпляра вернется ошибка с кодом 1.
Спасибо за оперативный ответ!
Экземпляр точно 1, перепроверил много раз. Но код загружался на ПЛК множество раз через полную загрузку и ПЛК не перезагружался. Внутренний счетчик экземпляров библиотеки находится в области памяти не затрагиваемой при обновлении кола проекта?
Евгений Кислов
16.11.2022, 08:37
Спасибо за оперативный ответ!
Экземпляр точно 1, перепроверил много раз. Но код загружался на ПЛК множество раз через полную загрузку и ПЛК не перезагружался. Внутренний счетчик экземпляров библиотеки находится в области памяти не затрагиваемой при обновлении кола проекта?
Вообще, если код загружался через полную загрузку (а не через онлайн-изменение) - то все должно работать корректно.
У нас когда-то были проблемы, похожие на ту, которую описываете вы - их поправили в прошивке 1.3.0812.1315.
Перепроверил - действительно при полной загрузке счетчик не сбрасывается. При перезагрузке вызов начинает работать. Если потом упустить количество даже не экземпляров блоков, а вызовы одного и того экземпляра с разными параметрами, не сбросив его в промежутках в false - перестает работать. И только перезагрузка помогает
Zagagulkin
07.07.2023, 12:09
Здравствуйте, а как организовать циклический доступ, например к БД каждые 10 секунд, с помощью CmpSysExec?
Евгений Кислов
07.07.2023, 12:11
Здравствуйте, а как организовать циклический доступ, например к БД каждые 10 секунд, с помощью CmpSysExec?
Для этого потребуется циклически вызывать экземпляр ФБ из библиотеки CmpSysExec - например, по таймеру.
Zagagulkin
07.07.2023, 12:52
Спасибо, за оперативный ответ!
Zagagulkin
07.07.2023, 14:45
timer(ENABLE := TRUE, TIMELOW := T#10S, TIMEHIGH := T#1MS);
IF timer.OUT THEN
arIntErrorTable[i] := INSERT_TO_DB(xEnable := TRUE, tableName := arLINES_COUNTERS[1][i], counterStr := arLINES_COUNTERS[2][i], atSpeed := 1);
IF arIntErrorTable[i] = 1 THEN
answerStr := arLINES_COUNTERS[1][i];
END_IF
i := i + 1;
IF i > 7 THEN
i := 1;
END_IF
END_IF
Вот такой код как-то странно работает, при первом проходе от 1 до 7, данные записываются в БД SQlite3 функцией INSERT_TO_DB(обертка над SysExec3), а при последующих возвращает код ошибки 1.
Евгений Кислов
07.07.2023, 20:57
Выложите, пожалуйста, простейший проект, в котором я смогу повторить вашу проблему.
Zagagulkin
10.07.2023, 07:52
Проект во вложении.
Евгений Кислов
10.07.2023, 07:59
Проект во вложении.
Не вижу в проекте работы с SQLite.
Zagagulkin
10.07.2023, 08:14
Проект во вложении.
Евгений Кислов
10.07.2023, 08:32
Проект во вложении.
Всё равно не вижу.
Программа PLC_PRG пустая.
Zagagulkin
10.07.2023, 08:39
Функция INSERT_TO_DB
Евгений Кислов
10.07.2023, 08:53
Функция INSERT_TO_DB
Скачайте, пожалуйста, тот проект, что вы выложили выше, откройте его и выложите скриншот, на котором будет видно эту функцию.
Zagagulkin
10.07.2023, 08:55
Прошу прощения, не то прислал.
Евгений Кислов
10.07.2023, 09:06
Прошу прощения, не то прислал.
Вы внутрии функции INSERT_TO_DB вызываете функциональный блок sysExecute3.
Это некорректно, так как локальные переменные функции (в т.ч. экземпляр ФБ вместо со всеми его данными) не сохраняются при его вызове.
Вам нужно сделать INSERT_TO_DB фунциональным блоком.
Zagagulkin
10.07.2023, 10:03
Понял Вас, спасибо за совет, сейчас переделаю.
Zagagulkin
10.07.2023, 10:30
Евгений, еще раз спасибо огромное за помощь, всё работает!
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot