Просмотр полной версии : Работа с MySQL с новой прошивкой.
Добрый день.
Пытаюсь запустить функцию MySQL_CLIENT из новой прошивки СПК для SP16. https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_MySQL_3516v1.projectarchive
Компиляция проходит, все нормально. Но при подаче на вход 1 для запроса нечего не происходит.
fbMySqlClient(xExecute:=SQLstartread,sUser:=sUser, sPassword:=sPassword,sipAddr:=sIpAddr,sDatabase:=s Database,sSqlStatement:=sSqlStatementread);
fbMySqlClient.asResult[1];
fbMySqlClient.xDone;
fbMySqlClient.xError;
fbMySqlClient.usiCountOfStrings;
fbMySqlClient.xBusy;
fbMySqlClient.xOverFlow;
Причем (xError, xbusy,xDone) все в False.
Такое впечатление,что не включена утилита mysql, возможно необходимо что-то еще включить в настройках СПК, так как база работает и возвращает ответы запросы, через ПО на Visual C.
Может есть какой-то более расширенный пример?
Евгений Кислов
17.05.2021, 10:32
Добрый день.
Пытаюсь запустить функцию MySQL_CLIENT из новой прошивки СПК для SP16. https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/08_Sockets/Example_MySQL_3516v1.projectarchive
Компиляция проходит, все нормально. Но при подаче на вход 1 для запроса нечего не происходит.
fbMySqlClient(xExecute:=SQLstartread,sUser:=sUser, sPassword:=sPassword,sipAddr:=sIpAddr,sDatabase:=s Database,sSqlStatement:=sSqlStatementread);
fbMySqlClient.asResult[1];
fbMySqlClient.xDone;
fbMySqlClient.xError;
fbMySqlClient.usiCountOfStrings;
fbMySqlClient.xBusy;
fbMySqlClient.xOverFlow;
Причем (xError, xbusy,xDone) все в False.
Такое впечатление,что не включена утилита mysql, возможно необходимо что-то еще включить в настройках СПК, так как база работает и возвращает ответы запросы, через ПО на Visual C.
Может есть какой-то более расширенный пример?
Добрый день.
У вас какой тип аутентификации в MySQL используется?
У нас пока только mysql_native_password поддерживается, SHA2 добавим в грядущей прошивке.
Для пользователя под которым подключаюсь,установлен плагин mysql_native_password.
Причем когда делаю сброс СПК и первый раз делаю запрос SQL fbMySqlClient.xBusy становится TRUE.
При следующих изменениях xExecute не происходит уже такого, пока не сделаешь сброс.
Причем тот же запрос через терминал с СПК проходит нормально. А вот с Codesys никак.
Евгений Кислов
17.05.2021, 12:10
Для пользователя под которым подключаюсь,установлен плагин mysql_native_password.
Причем когда делаю сброс СПК и первый раз делаю запрос SQL fbMySqlClient.xBusy становится TRUE.
При следующих изменениях xExecute не происходит уже такого, пока не сделаешь сброс.
Попробуйте подключиться к контроллеру по SSH и из терминала отправить команду, которую отправляет блок (ее видно во внутренней переменной).
Ну подключился через Web конфигуратор и отправил через терминал именно команду которую отправляет блок(скопировал из блока,убрав ковычки только которые значения String обозначают),все нормально прошло.
Сейчас постоянно при отправке через codesys выходит на несколько секунд xbusy=true. При смене сигнала на вход,но остальные значения не получает.
Евгений Кислов
17.05.2021, 12:29
Что значит "всё нормально прошло"?
Выложите скриншот.
Может в Codesys необходимо что-то подключить или настройки специфичные выполнить для СПК? Ведь по логике доступ к linux через авторизацию происходит.Но это так мысли в слух,не очень много знаний просто по Codesys.
Что значит "всё нормально прошло"?
Выложите скриншот.
55116Команда обработана,результат из базы получен корректный.
Евгений Кислов
17.05.2021, 12:33
55116Команда обработана,результат из базы получен корректный.
Ок, а теперь попробуйте отправить ту же команду в примере проекта (никак его не редактируя).
Через пример команда выполнилась, корректный ответ получен.
Осталось понять,что не так,когда копирую функцию в проект и запускаю ее в проекте.
Евгений Кислов
17.05.2021, 12:52
Через пример команда выполнилась, корректный ответ получен.
Осталось понять,что не так,когда копирую функцию в проект и запускаю ее в проекте.
Как я понял, вы пишете на языке ST - вероятно, некорректно производите вызов ФБ.
Выложите ваш проект - тогда можно будет понять, в чем проблема.
Да на ST.По сути я скопировал функциональный блок из примера, добавил его в Application. Подключил библиотеку CmpSysExec 3.5.16.30. Объявил переменные. И вызываю функцию по изменению SQLstartread на 1 вручную для проверки.
PROGRAM PLC_PRG
VAR
fbMySqlClient: MySQL_CLIENT;
xSendCommand: BOOL;
sUser: STRING(30) := 'owen';
sPassword: STRING(30) := '';
sIpAddr: STRING(30) := '1.1.1.1';
sDatabase: STRING(30) := 'example';
sSqlStatementread: STRING(255) := 'SELECT qtyinstock FROM vtiger_products WHERE productid = 15';
sSqlStatementwrite: STRING(255);
asResult: ARRAY [1..255] OF STRING(255);
usiCountOfStrings: USINT;
END_VAR
SQLstartread;
fbMySqlClient(xExecute:=SQLstartread,sUser:=sUser, sPassword:=sPassword,sipAddr:=sIpAddr,sDatabase:=s Database,sSqlStatement:=sSqlStatementread);
fbMySqlClient.asResult[1];
fbMySqlClient.xDone;
fbMySqlClient.xError;
fbMySqlClient.usiCountOfStrings;
fbMySqlClient.xBusy;
fbMySqlClient.xOverFlow;
Евгений Кислов
17.05.2021, 14:05
Выложите проект - а то сейчас, например, всё равно непонятно, что такое SQLstartread и где оно объявлено.
Выложите проект - а то сейчас, например, всё равно непонятно, что такое SQLstartread и где оно объявлено.
Хорошо,переписал пример на ST. Подставляю в него параметры своего сервера, не работает.
Беру оригинальный пример на CFC ставлю параметры сервера своего, все работает.
Не понимаю, почему.
Подскажите, что не так делаю.
а с чего вдруг стали ненужны пробелы между ключом и именем, такие как пользователь и пароль
Все значения переменные вроде получают,корректно.Вы думаете в этом проблема? Я попробую завтра,но что-то никогда не обращал на это внимание.
Евгений Кислов
18.05.2021, 07:01
Пример корректного кода на ST:
fbMySqlClient(xExecute:=xSendCommand,sUser:=sUser, sPassword:=sPassword,sipAddr:=sIpAddr,sDatabase:=s Database,sSqlStatement:=sSqlStatement);
IF fbMySqlClient.xDone THEN
asResult := fbMySqlClient.asResult;
usiCountOfStrings := fbMySqlClient.usiCountOfStrings;
END_IF
55146
Пример корректного кода на ST:
fbMySqlClient(xExecute:=xSendCommand,sUser:=sUser, sPassword:=sPassword,sipAddr:=sIpAddr,sDatabase:=s Database,sSqlStatement:=sSqlStatement);
IF fbMySqlClient.xDone THEN
asResult := fbMySqlClient.asResult;
usiCountOfStrings := fbMySqlClient.usiCountOfStrings;
END_IF
55146
Евгений, спасибо большое!
Понял ошибку свою!
Примерно аналогичная ситуация
sFinish31: STRING(255);
sProstoy: STRING(255):='INSERT INTO "titorovka_lowperformance31" ("startdata","starttime") VALUES ($'';
sString2: STRING(255):='$'::date,$'';
sString3: STRING(255):='$'::time';
sString4: STRING(255):=',$'';
sString5: STRING(255):='$',$'';
sString6: STRING(255):='$')';
sReturnId31: STRING(255):=') RETURNING "titorovka_lowperformance31"."id"';
sFinish31:= OSU.CONCAT8(
sProstoy,
dataTemp,
sString2,
timeTemp,
sString3,
sReturnId31,
);
fbPostgreSqlClientInsert31(
xExecute:=xStartInsert,
sUser:=sUser,
sPassword:=sPassword,
sIpAddr:=sIpAddr,
sDatabase:=sDatabase,
sSqlStatement:=sFinish31);
IF fbPostgreSqlClientInsert31.xDone THEN
//SQL_FORMAT(asData:=fbPostgreSqlClientInsert31.asRe sult,
// iStringCount:=fbPostgreSqlClientInsert31.usiCountO fStrings);
//awsResult31:=SQL_FORMAT.awsData;
xStartInsert:=FALSE;
если убрать RETURNING "titorovka_lowperformance31"."id"' то запись происходит но мне нужен id для следующих действий в CFC работает в ST нет не пойму в чем проблема. и при этом xDone всегда отрабатывает.
Запрос который не работает 'INSERT INTO "titorovka_lowperformance31" ("startdata","starttime") VALUES ('2024-7-26'::date,'15:33:22'::time) RETURNING "titorovka_lowperformance31"."id"'
Запрос который работает 'INSERT INTO "titorovka_lowperformance31" ("startdata","starttime") VALUES ('2024-7-26'::date,'15:33:22'::time)'
Евгений Кислов
26.07.2024, 16:39
в CFC работает в ST нет
Т. е. при использовании CFC запрос с RETURNING работает корректно?
Да, приэтом в нескольких программных блоках.
Евгений Кислов
27.07.2024, 17:02
Да, приэтом в нескольких программных блоках.
Тогда сравните, чем отличается рабочая реализация на CFC от нерабочей на ST.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot