как вариант можно чрез python записывать в базу
Код:
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)
*)
у меня в консоли читается Screenshot 2026-01-13 143502.png