Объявление

Свернуть
Пока нет объявлений.

Работа с БД MySql из codesys

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Работа с БД MySql из codesys

    Добрый день. Возможно ли на ПЛК50.10 Зав №20050020 отправить команду из кода программы codesys с помощью функции SysProcessExecuteCommand?
    Или же доступ к линукс терминалу закрыт? можно ли как то открыть его?

  • #2
    Можно, я в телеграмм через нее сообщения отправляю.
    вот так примерно
    c_sCommand: STRING(255) :='curl -s -X POST https://api.telegram.org/bot#TOKEN#/sendMessage -d "chat_id=#CHAT_ID#" -d "text=#sObject###sTEXT1# #TEXT#_kWt"' ;//

    IF PLC_Time.sysTimeDate.wHour=uhour AND PLC_Time.sysTimeDate.wMinute=uMin AND PLC_Time.sysTimeDate.wSecond=5 THEN
    x:=TRUE;
    ELSE
    x:=FALSE;
    END_IF
    trig1(clk:=x);
    xExecute:=trig1.Q;
    IF xExecute THEN
    sCommand := OSU.ReplaceAllSubstrings(c_sCommand, '#TOKEN#', sToken);
    sCommand := OSU.ReplaceAllSubstrings(sCommand, '#CHAT_ID#', sChatId);
    sCommand := OSU.ReplaceAllSubstrings(sCommand, '#TEXT#', sUtf8Message);
    sCommand := OSU.ReplaceAllSubstrings(sCommand, '#sObject#', sObject);
    sCommand := OSU.ReplaceAllSubstrings(sCommand, '#sTEXT1#', sText1);
    SysProcessExecuteCommand2(pszCommand:= sCommand, pszStdOut:=stdout, pResult:=pResult, udiStdoutLen:=SIZEOF(stdout));//,
    END_IF
    Последний раз редактировалось Михаил_Ка; 15-01-2025, 08:13 AM.

    Комментарий


    • #3
      Но тут надо отслеживать работу, метод может вешать плк если не сможет отправить по причине отсутствия интернета.
      Если надо могу скинуть кусочек реализации для работы с ТГ api. там по аналогии под свою задачу перепишете.


      Много обещали добавить в библиотеку, а по факту только костылики пользовательские.

      Комментарий


      • #4
        FUNCTION_BLOCK FB_MySQL_CLIENT
        VAR_INPUT
        xExecute: BOOL;
        sUser: STRING(30);
        sPassword: STRING(30);
        sIpAddr: STRING(30);
        sDatabase: STRING(30);
        // Тело SQL-запроса
        sSqlStatement: STRING(255);

        END_VAR
        VAR_OUTPUT
        xDone: BOOL;
        xBusy: BOOL;
        xError: BOOL;
        asResult: ARRAY [1..255] OF STRING(255);
        usiCountOfStrings: USINT;
        xOverFlow: BOOL;
        END_VAR
        VAR
        sCommand: STRING(500);
        fbRiseEdge: R_TRIG;
        asSqlStatement1: STRING;
        diResult: DINT;
        Out:STRING;
        udiOutLen:UDINT;
        pRes : POINTER TO SysProcess.SysTypes.RTS_IEC_RESULT;

        sTestComand: STRING(INT#255);

        END_VAR
        VAR CONSTANT
        c_sCommand: STRING(255) :='mysql -s -u#USER# -p#PASS# -h #HOST# --database=#DATABASE# --default-character-set=cp1251 -e "#SQL#"';

        END_VAR

        fbRiseEdge(CLK := xExecute);
        IF fbRiseEdge.Q THEN
        sCommand := OSU.ReplaceSubstring(c_sCommand, '#USER#', sUser);
        sCommand := OSU.ReplaceSubstring(sCommand, '#PASS#', sPassword);
        sCommand := OSU.ReplaceSubstring(sCommand, '#HOST#', sIpAddr);
        sCommand := OSU.ReplaceSubstring(sCommand, '#DATABASE#', sDatabase);
        sCommand := OSU.ReplaceSubstring(sCommand, '#SQL#', sSqlStatement);

        diResult:=SysProcessExecuteCommand2(pszCommand:=sC ommand , pszStdOut:=Out , udiStdOutLen:=SIZEOF(out) , pResult:=pRes );
        END_IF

        вот мой кусок кода при отправке diResult=1 это я так понимаю что команда на терминал доставлена при этом в базу данные не приходят



        Последний раз редактировалось Aleksey; 16-01-2025, 09:49 AM.

        Комментарий


        • #5
          Понял что команду mysql -s не будет поддерживать контролеры АГАВА тк не установлена в linux ядре утилита MySql

          Комментарий

          Обработка...
          X