как вариант можно чрез python записывать в базу
у меня в консоли читается Screenshot 2026-01-13 143502.pngКод:FUNCTION_BLOCK SQLitePython VAR_INPUT xExecute: BOOL; // по переднему фронту запускаем скрипт на питоне sSqlStatement: STRING(255); // в строке должны быть аргументы через пробел для передачи в базу число и строка в кавычках END_VAR VAR_OUTPUT xDone: BOOL; xBusy: BOOL; xError: BOOL; // Результат выполнения запроса asResult: ARRAY [1..255] OF STRING(255); // Число строк в ответе (число элементов массива asResult) usiCountOfStrings: USINT; // TRUE - при выдаче ответа произошло переполнение массива, часть информации потеряна xOverFlow: BOOL; END_VAR VAR fbSe4: CmpSysExec.SysExecute4; sCommand: STRING(255); fbRiseEdge: R_TRIG; END_VAR VAR CONSTANT c_sCommand: STRING(255) := 'python3 test_sqlite3.py #SQL#'; END_VAR fbRiseEdge(CLK := xExecute); IF fbRiseEdge.Q THEN sCommand := OSU.ReplaceSubstring(c_sCommand, '#SQL#', sSqlStatement); END_IF; fbSe4 ( xExecute := fbRiseEdge.Q, sCommand := sCommand, sOutput => asResult, cntReadStr => usiCountOfStrings, xOverFlow => xOverFlow, xDone => xDone, xBusy => xBusy, xError => xError ); (* скрипт test_sqlite3.py import sqlite3 import sys def save_data(arg1, arg2): try: conn = sqlite3.connect('/home/root/CODESYS/otchet.db') cursor = conn.cursor() # first step #cursor.execute('''CREATE TABLE otchet (id INTEGER PRIMARY KEY, "1" TEXT,"2" TEXT)''') # second step user_data = [(arg1, arg2)] cursor.executemany('INSERT INTO otchet ("1","2") VALUES(?,?);', user_data) conn.commit() except Exception as ex: print(f'Error {str(ex)}') finally: if 'conn' in locals(): conn.close() if __name__ == "__main__": if len(sys.argv) != 3: sys.exit(1) try: arg1 = int(sys.argv[1]) # arg2 = sys.argv[2].encode('utf-8', errors='surrogateescape').decode('cp1251') except ValueError: print('error code') sys.exit(1) save_data(arg1, arg2) *)




Ответить с цитированием
