一,概述
AlongWu编写的CODESYS与MYSQL操作的第三方库。
下载地址:
https://download.csdn.net/download/weixin_42386991/88995577
本第三方库目前只有3个功能块。
分别是
Mysql_Open:建立mysql连接和完成授权。
Mysql_ExecuteNonQuery:执行 Insert,Update,Delete等 无数据返回的 SQL语句。
Mysql_QueryData:执行 select的 SQL语句。
本库特色:
1,MYSQL语句通过字节数组的形式输入命令功能块。其最大长度为1450个Byte。
2,Mysql_QueryData 会将Mysql回复的数据,自动将解析并输出数据项的值并将其以50*20Byte的二维字节数组的显示输出。如返回3行3列数值,3行*3列,共计9个数据项,那么前9个20Byte的数组将分别存有该9个数据项的值(字节数组)。用户需要自己将这9个20Byte的数组,根据业务需要,自己转为需要的数据。
另外,
由于CODESYS不支持动态分配内存,所以无法像PC那样对MYSQL回复内容进行灵活地生成表格。
如果觉得sql语句的输入长度1450不够,或者对Mysql_QueryData解析Mysql回复数据有专门的解析需要,可以联系我。
二,CODESYS安装和测试
三、简单调用测试程序
(*
#@Copyright:
#@License:
#@Birth: created by Along on 2024-03-24
#@Content: PLC_PRG-主程序
#@Version: 0.0.3
#@Revision: last revised by Along on 2024-03-24
#@Note
*)
PROGRAM PLC_PRG
VAR CONSTANT
arr_empty :ARRAY [0..1449] OF BYTE :=[0]; //空白字节数组
str_msg :STRING(255); //空白 字符串
END_VAR
VAR
fb_mysql_open :Mysql_Open; //mysql Open 功能块实例
fb_mysql_executenonquery :Mysql_ExecuteNonQuery ; //mysql_ExecuteNonQuery 功能块实例
fb_mysql_querydata :Mysql_QueryData ; //mysql_QueryData 功能块实例
str_insert_1 :STRING; //字符串 mysql insert语句
str_query_1 :STRING; //字符串 mysql select语句
arr_sqlcmd :ARRAY [0..1449] OF BYTE; //字节数组 sql指令
i_len :INT; //sql指令 字节素组 有效字节数量
r_trig_nonequery :R_TRIG; //上升沿 执行mysql_ExecuteNonQuery位
r_trig_query :R_TRIG; //上升沿 执行mysql_QueryData位
bw_nonequery_exec :BOOL; //位 执行mysql_ExecuteNonQuery位
bw_query_exec :BOOL; //位 执行mysql_QueryData位
str_error_msg :STRING(255); //字符串 mysql回复错误信息
END_VAR
//mysql Open 功能块实例
fb_mysql_open(
byte_ip1:= 192,
byte_ip2:= 168,
byte_ip3:= 1,
byte_ip4:= 109,
ui_port:= 3306,
str_account:= 'along',
str_password:= '123456',
str_database:= 'mydatabase',
bw_enable:= ,
bs_connected=> ,
bs_busy=> ,
bs_error=> ,
ui_errorid=> ,
bs_inited=> ,
pt_handler=> );
//上升沿 执行nonquery
r_trig_nonequery(CLK:= bw_nonequery_exec, Q=> );
//上升沿 执行nonquery
IF r_trig_nonequery.Q THEN
//复位字节数组
arr_sqlcmd := arr_empty;
//复位错误字符串
str_error_msg := str_msg;
//sql指令
str_insert_1 := 'INSERT INTO `mytable` (`key`, `mytext`) VALUES (111, $'abc$')';
//指令长度
i_len := LEN(str_insert_1);
//字符串指令转字节数组
MEM.MemMove(pSource:= ADR(str_insert_1), pDestination:= ADR(arr_sqlcmd), uiNumberOfBytes:=INT_TO_UINT(i_len) );
END_IF
//mysql_ExecuteNonQuery 功能块实例
fb_mysql_executenonquery(
pt_handler:= fb_mysql_open.pt_handler,
bw_execute:= bw_nonequery_exec,
buff_sql:= arr_sqlcmd,
bs_failure=> ,
bs_OK=> ,
bs_FE=> ,
bs_FF=> ,
str_FF_msg => str_error_msg
);
//上升沿 执行querydata
r_trig_query(CLK:= bw_query_exec, Q=> );
//上升沿 执行querydata
IF r_trig_query.Q THEN
//复位字节数组
arr_sqlcmd := arr_empty;
//复位错误字符串
str_error_msg := str_msg;
//sql指令
str_query_1 :='SELECT * FROM mytable';
//指令长度
i_len := LEN(str_query_1);
//字符串指令转字节数组
MEM.MemMove(pSource:= ADR(str_query_1), pDestination:= ADR(arr_sqlcmd), uiNumberOfBytes:=INT_TO_UINT(i_len) );
END_IF
//mysql_QueryData 功能块实例
fb_mysql_querydata(
pt_handler:= fb_mysql_open.pt_handler,
bw_execute:= bw_query_exec,
buff_sql:= arr_sqlcmd,
bs_failure=> ,
bs_OK=> ,
bs_FF=> ,
str_FF_msg=> ,
buff_data=> ,
i_item_count=> );
测试程序主要就是Mysql_Open,Mysql_ExecuteNonQuery,Mysql_QueryData 的使用测试。