From 868daf94f29ce1ffdd799a68c07bb668cd373bcd Mon Sep 17 00:00:00 2001 From: HP\李良庭 <liliangting@lanpucloud.cn:1111> Date: 星期二, 08 七月 2025 11:49:03 +0800 Subject: [PATCH] 提交分辨率自适应版本V3.1.0.1500 --- src/uSaveData.~pas | 781 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 781 insertions(+), 0 deletions(-) diff --git a/src/uSaveData.~pas b/src/uSaveData.~pas new file mode 100644 index 0000000..247167f --- /dev/null +++ b/src/uSaveData.~pas @@ -0,0 +1,781 @@ +{------------------------------------------------------------------------------} +{单元名称:uSaveData.pas } +{模块名称:过程数据存储模块 } +{功能描述:将系统参数存储到本地SQLite数据库 } +{建立日期:2023-10-31 } +{修改日期:2023-10-31 } +{版权所有:李良庭 liangtingli@outlook.com } +{------------------------------------------------------------------------------} +unit uSaveData; + +interface + +uses + Windows, Classes, SysUtils, Dialogs, StrUtils, DateUtils, Variants, Grids, Math, + SQLite3, SQLiteTable3, sListBox, Global, log4me, PubUtils; + + {申明内部调用函数} + procedure createConfigSql(table:string); + procedure insertConfigSql(table:string; no:Integer; nam,val:String); + procedure updateConfigSql(table:string; nam,val:String); + function queryConfigSql(table,nam:string):string; + function queryConfigCnt(table,nam:string):integer; + + procedure createGrainSql(table:string); + procedure insertGrainSql(table:string; cod:Integer; nam:String;coef1,coef2,coef3,coef4,coef5,intercept:string); + function queryGrainSql(table,nam:string):TGrainRec; + function queryGrainSql1(table:string; cod:Integer):TGrainRec; + procedure queryGrainlistSql(table:string; lb:TsListBox); + + procedure createTestSql(table:string); + procedure insertTestSql(table:string; mode,is_auto,tim,cod:Integer; nam,info:String; mois,temp,water:double); + + {申明外部调用函数} + procedure InitConfig(); + procedure InitConn(); + procedure InitGrain(); + procedure InitTestDB(); + procedure InitWeight(); + procedure InitManager(); + procedure AddGrainRecord(nam:string); + procedure deleteGrainSql(table,nam: string); + procedure updateNameSql(table,new,nam: string); + function queryGrainNumSql(table:string; nam:string):Integer; + + procedure LoadParam(); + procedure SaveParam(); + procedure SaveWgParam(); + procedure SaveVerifyParam(); + procedure SaveInterceptParam(val:string); + +implementation + +//--------config配置数据库函数-------------------------------------------- +//创建config数据库 +procedure createConfigSql(table:string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + //建 config数据表 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + if not sqldb.TableExists(table) then begin + sql := 'CREATE TABLE [' + table + '] (' + +'[id] INTEGER PRIMARY KEY,' + +'[nam] VARCHAR(20) NULL,' + +'[val] VARCHAR(200) NULL );'; + sqldb.ExecSQL(sql); + //新建索引 + sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; + sqldb.ExecSQL(sql); + end; + finally + FreeAndNil(sqldb); + end; +end; + +//插入一条config数据 +procedure insertConfigSql(table:string; no:Integer; nam,val:String); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + //开启事务,插入数据 + sqldb.BeginTransaction; + sql := Format('INSERT INTO [%s](id,nam,val) VALUES(%d,"%s","%s");', + [table,no,nam,String(AnsiToUtf8(val))]); + sqldb.ExecSQL(sql); + sqldb.Commit; //执行事务 + finally + FreeAndNil(sqldb); + end; +end; + +//更新一条config数据 +procedure updateConfigSql(table:string; nam,val:String); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('UPDATE [%s] SET val="%s" WHERE nam="%s";', + [table,String(AnsiToUtf8(val)),nam]); + sqldb.ExecSQL(sql); + finally + FreeAndNil(sqldb); + end; +end; + +//查询一条config数据(指定name) +function queryConfigSql(table,nam:string):string; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //初始化返回值 + Result := ''; + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT * FROM [%s] WHERE nam="%s"',[table,nam]); + sqltb := sqldb.GetTable(sql); + if sqltb.Count>0 then + Result := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['val'])); + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//查询config数据数量 +function queryConfigCnt(table,nam:string):integer; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //初始化返回值 + //Result := 0; + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT * FROM [%s] WHERE nam="%s"',[table,nam]); + sqltb := sqldb.GetTable(sql); + Result := sqltb.Count; + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//-------- Grain数据库函数-------------------------------------------- +//创建 grain数据库,增加截距字段 +procedure createGrainSql(table:string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + //建 config数据表 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + if not sqldb.TableExists(table) then begin + sql := 'CREATE TABLE [' + table + '] (' + +'[id] INTEGER PRIMARY KEY,' + +'[cod] INTEGER NULL,' + +'[nam] VARCHAR(20) NULL,' + +'[coef1] VARCHAR(32) NULL,' + +'[coef2] VARCHAR(32) NULL,' + +'[coef3] VARCHAR(32) NULL,' + +'[coef4] VARCHAR(32) NULL,' + +'[coef5] VARCHAR(32) NULL,' + +'[intercept] VARCHAR(32) NULL );'; + sqldb.ExecSQL(sql); + //新建索引 + sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; + sqldb.ExecSQL(sql); + end; + finally + FreeAndNil(sqldb); + end; +end; + +//插入一条config数据,增加截距 +procedure insertGrainSql(table:string; cod:Integer; nam:String;coef1,coef2,coef3,coef4,coef5,intercept:String); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + //开启事务,插入数据 + sqldb.BeginTransaction; + sql := Format('INSERT INTO [%s](cod,nam,coef1,coef2,coef3,coef4,coef5,intercept) VALUES(%d,"%s","%s","%s","%s","%s","%s","%s");', + [table, + cod, + String(AnsiToUtf8(nam)), + coef1, + coef2, + coef3, + coef4, + coef5, + intercept]); + sqldb.ExecSQL(sql); + sqldb.Commit; //执行事务 + finally + FreeAndNil(sqldb); + end; +end; + +//使用nam查询一条grain数据 +//扩充一个截距参数,liliangting 2025.1.16 +function queryGrainSql(table,nam:string):TGrainRec; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //初始化返回值 + Result.Code := 0; + Result.Name := ''; + Result.Coef[0] := '0'; + Result.Coef[1] := '0'; + Result.Coef[2] := '0'; + Result.Coef[3] := '0'; + Result.Coef[4] := '0'; + Result.Intercept := '0'; + + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT * FROM [%s] WHERE nam="%s"',[table,AnsiToUtf8(nam)]); + sqltb := sqldb.GetTable(sql); + if sqltb.Count>0 then begin + Result.Code := sqltb.FieldAsInteger(sqltb.FieldIndex['cod']); + Result.Name := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam'])); + Result.Coef[0] := sqltb.FieldAsString(sqltb.FieldIndex['coef1']); + Result.Coef[1] := sqltb.FieldAsString(sqltb.FieldIndex['coef2']); + Result.Coef[2] := sqltb.FieldAsString(sqltb.FieldIndex['coef3']); + Result.Coef[3] := sqltb.FieldAsString(sqltb.FieldIndex['coef4']); + Result.Coef[4] := sqltb.FieldAsString(sqltb.FieldIndex['coef5']); + //增加截距 + Result.Intercept := sqltb.FieldAsString(sqltb.FieldIndex['intercept']); + end; + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//使用cod查询一条grain数据 +//扩充一个截距参数,liliangting 2025.1.16 +function queryGrainSql1(table:string; cod:Integer):TGrainRec; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //初始化返回值 + Result.Code := 0; + Result.Name := ''; + Result.Coef[0] := '0'; + Result.Coef[1] := '0'; + Result.Coef[2] := '0'; + Result.Coef[3] := '0'; + Result.Coef[4] := '0'; + Result.Intercept := '0'; + + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT * FROM [%s] WHERE cod=%d;',[table,cod]); + sqltb := sqldb.GetTable(sql); + if sqltb.Count>0 then begin + Result.Code := sqltb.FieldAsInteger(sqltb.FieldIndex['cod']); + Result.Name := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam'])); + Result.Coef[0] := sqltb.FieldAsString(sqltb.FieldIndex['coef1']); + Result.Coef[1] := sqltb.FieldAsString(sqltb.FieldIndex['coef2']); + Result.Coef[2] := sqltb.FieldAsString(sqltb.FieldIndex['coef3']); + Result.Coef[3] := sqltb.FieldAsString(sqltb.FieldIndex['coef4']); + Result.Coef[4] := sqltb.FieldAsString(sqltb.FieldIndex['coef5']); + //增加截距 + Result.Intercept := sqltb.FieldAsString(sqltb.FieldIndex['intercept']); + end; + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//查询粮种清单 +procedure queryGrainlistSql(table:string; lb:TsListBox); +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT nam FROM [%s];',[table]); + sqltb := sqldb.GetTable(sql); + lb.Items.Clear; + while not sqltb.EOF do begin + lb.Items.Add(Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam']))); + sqltb.Next; + end; + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//查询最新的粮种cod号码 +function queryGrainCodSql(table:string):Integer; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT MAX(cod)+1 max_cod FROM [%s];',[table]); + sqltb := sqldb.GetTable(sql); + Result := sqltb.FieldAsInteger(sqltb.FieldIndex['max_cod']); + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//按粮种nam查询记录数量 +function queryGrainNumSql(table:string; nam:string):Integer; +var + sqldb : TSQLiteDatabase; + sqltb : TSQLiteTable; + sql : String; +begin + Result := 0; + //查询table表val列 + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('SELECT * FROM [%s] WHERE [nam]="%s";',[table ,AnsiToUtf8(nam)]); + sqltb := sqldb.GetTable(sql); + Result := sqltb.Count; + finally + FreeAndNil(sqltb); + FreeAndNil(sqldb); + end; +end; + +//更新一条grain数据 +procedure updateGrainSql(table:string; rec:TGrainRec); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('UPDATE [%s] SET coef1="%s",coef2="%s",coef3="%s",coef4="%s",coef5="%s" WHERE nam="%s";', + [table, + rec.Coef[0], + rec.Coef[1], + rec.Coef[2], + rec.Coef[3], + rec.Coef[4], + AnsiToUtf8(rec.Name)]); + sqldb.ExecSQL(sql); + finally + FreeAndNil(sqldb); + end; +end; + +//更新截距参数 +procedure updateInterceptSql(table,val,name: string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('UPDATE [%s] SET intercept="%s" WHERE nam="%s";', + [table, val, AnsiToUtf8(name)]); + sqldb.ExecSQL(sql); + finally + FreeAndNil(sqldb); + end; +end; + +//更新粮种名称 +procedure updateNameSql(table,new,nam: string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('UPDATE [%s] SET nam="%s" WHERE nam="%s";', + [table, AnsiToUtf8(new), AnsiToUtf8(nam)]); + sqldb.ExecSQL(sql); + finally + FreeAndNil(sqldb); + end; +end; + +//删除一条粮种参数 +procedure deleteGrainSql(table,nam: string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); + try + sql := Format('DELETE FROM [%s] WHERE [nam]="%s";', [table, AnsiToUtf8(nam)]); + sqldb.ExecSQL(sql); + finally + FreeAndNil(sqldb); + end; +end; + +//-------- Test数据库函数-------------------------------------------- +//创建 test数据库 +procedure createTestSql(table:string); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + //建 config数据表 + sqldb := TSQLiteDatabase.Create(glAppPath + DATA_DIR + table + '.db'); + try + if not sqldb.TableExists(table) then begin + sql := 'CREATE TABLE [' + table + '] (' + +'[id] INTEGER PRIMARY KEY,' //自动编号 + +'[mod] INTEGER NULL,' //自动模式=0,手动模式=1 + +'[is_auto] INTEGER CHECK ([is_auto] IN (0, 1)),' //增加自动保存标志 + +'[tim] INTEGER NULL,' //日期时间 + +'[cod] INTEGER NULL,' //粮种代码 + +'[nam] VARCHAR(20) NULL,' //粮种名称 + +'[info] VARCHAR(50) NULL,' //样本信息 + +'[mois] FLOAT NULL,' //含水率 + //+'[ratio] FLOAT NULL,' + //+'[weight] FLOAT NULL,' + +'[temp] FLOAT NULL,' //温度 + +'[water] FLOAT NULL );'; //湿度 + sqldb.ExecSQL(sql); + //新建索引 + sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; + sqldb.ExecSQL(sql); + end; + finally + FreeAndNil(sqldb); + end; +end; + +//插入一条 test数据 +procedure insertTestSql(table:string; mode,is_auto,tim,cod:Integer; nam,info:String; mois,temp,water:double); +var + sql : String; + sqldb : TSQLiteDatabase; +begin + sqldb := TSQLiteDatabase.Create(glAppPath + DATA_DIR + table + '.db'); + try + //开启事务,插入数据 + sqldb.BeginTransaction; + sql := Format('INSERT INTO [%s](mod,is_auto,tim,cod,nam,info,mois,temp,water) VALUES(%d,%d,%d,%d,"%s","%s",%.6f,%.6f,%.6f);', + [table,mode,is_auto,tim,cod,String(AnsiToUtf8(nam)),String(AnsiToUtf8(info)),mois,temp,water]); + sqldb.ExecSQL(sql); + sqldb.Commit; //执行事务 + finally + FreeAndNil(sqldb); + end; +end; + +//-------第一种全新创建config数据库的方法--------------------------------------- +//创建新的 config数据库 +procedure InitConfig(); +begin + if not FileExists(glConfig_db) then begin + //建 config数据库表 + createConfigSql(t_Config); + //初始化数据行 + insertConfigSql(t_Config,1,'StartFreq','10500'); + insertConfigSql(t_Config,2,'StopFreq','12000'); + insertConfigSql(t_Config,3,'Step','50'); + insertConfigSql(t_Config,4,'Freq','0'); + insertConfigSql(t_Config,5,'Decay','1'); + insertConfigSql(t_Config,6,'ASK','1'); + insertConfigSql(t_Config,7,'Volume','0.52'); + insertConfigSql(t_Config,8,'Tare','1040'); + //新增开机启动延时时间 + insertConfigSql(t_Config,9,'Delay','10'); + //记录日志 + log4info(Format('系统:初始化创建 %s-参数数据库.',[t_Config])); + end; +end; + +//创建新的 conn数据库 +procedure InitConn(); +begin + if not FileExists(glConn_db) then begin + //建 config数据库表 + createConfigSql(t_Conn); + //初始化数据行 + insertConfigSql(t_Conn,1,'Ip','127.0.0.1'); + insertConfigSql(t_Conn,2,'Port','1502'); + insertConfigSql(t_Conn,3,'SerialPort','COM8'); + insertConfigSql(t_Conn,4,'Baud','115200'); + insertConfigSql(t_Conn,5,'Parity','N'); + insertConfigSql(t_Conn,6,'Data_bit','8'); + insertConfigSql(t_Conn,7,'Stop_bit','1'); + insertConfigSql(t_Conn,8,'AutoRun','false'); + insertConfigSql(t_Conn,9,'Time1','20'); + insertConfigSql(t_Conn,10,'Time2','30'); + //记录日志 + log4info(Format('系统:初始化创建 %s-参数数据库.',[t_Conn])); + end; +end; + +//创建新的 grain数据库,增加截距 +procedure InitGrain(); +begin + if not FileExists(glGrain_db) then begin + //建 config数据库表 + createGrainSql(t_Grain); + //初始化数据行 + insertGrainSql(t_Grain,1,'小麦','65.160129655062','-0.107375833331','0.000063694808','-0.000000011576','0','0'); + insertGrainSql(t_Grain,2,'稻谷','-8.443205789262','0.021404282111','-0.000008683206','0.000000001917','0','0'); + insertGrainSql(t_Grain,3,'黄豆','-6.204673384923','0.025161776479','0.000014765722','0.000000003440','0','0'); + insertGrainSql(t_Grain,4,'玉米','-16.278037347152','0.033766686581','-0.000015923042','0.000000002881','0','0'); + //记录日志 + log4info(Format('系统:初始化创建 %s-参数数据库.',[t_Grain])); + end; +end; + +//创建新的 test数据库 +procedure InitTestDB(); +begin + if not FileExists(glData_db) then begin + //建 config数据库表 + createTestSql(t_Data); + //记录日志 + log4info(Format('系统:初始化创建 %s-存储数据库.',[t_Data])); + end; +end; + +//创建新的 重量校准数据库 +procedure InitWeight(); +begin + if not FileExists(glWeight_db) then begin + //建 weight数据库表 + createConfigSql(t_Weight); + //初始化数据行 + insertConfigSql(t_Weight,1,'k','1'); + insertConfigSql(t_Weight,2,'b','1'); + insertConfigSql(t_Weight,3,'tare','0'); + insertConfigSql(t_Weight,4,'range','0'); //误差范围 + insertConfigSql(t_Weight,5,'test1','0'); + insertConfigSql(t_Weight,6,'test2','0'); + insertConfigSql(t_Weight,7,'test3','0'); + insertConfigSql(t_Weight,8,'std1','0'); + insertConfigSql(t_Weight,9,'std2','0'); + insertConfigSql(t_Weight,10,'std3','0'); + //记录日志 + log4info(Format('系统:初始化创建 %s-参数数据库.',[t_Weight])); + end; +end; + +//创建新的 manager 数据库 +procedure InitManager(); +begin + if not FileExists(glManager_db) then begin + //建 config数据库表 + createConfigSql(t_Manager); + //初始化数据行 + insertConfigSql(t_Manager,1,'Admin','123456'); + //记录日志 + log4info(Format('系统:初始化创建 %s-数据库.',[t_Manager])); + end; +end; + +//新建一条 grain数据 +procedure AddGrainRecord(nam:string); +var + cod : Integer; +begin + if FileExists(glGrain_db) then begin + //先查询最新的cod + cod := queryGrainCodSql(t_Grain); + //新增粮种数据行 + insertGrainSql(t_Grain,cod,nam,'0','0','0','0','0','0'); + //记录日志 + log4info(Format('系统:%s-新增一条粮种信息.',[t_Grain])); + end; +end; +//------- 加载和保存各类Config配置信息----------------------------------------- +//加载各类参数结构 +procedure LoadParam(); +var + c : Char; +begin + //加载系统参数 + if FileExists(glConfig_db) then begin + SysConfig.StartFreq := StrToFloatDef(queryConfigSql(t_Config,'StartFreq'), 10500); + SysConfig.StopFreq := StrToFloatDef(queryConfigSql(t_Config,'StopFreq'), 12000); + SysConfig.Step := StrToIntDef(queryConfigSql(t_Config,'Step'), 50); + SysConfig.Freq := StrToFloatDef(queryConfigSql(t_Config,'Freq'), 0); + SysConfig.Decay := StrToFloatDef(queryConfigSql(t_Config,'Decay'), 1); + SysConfig.ASK := StrToIntDef(queryConfigSql(t_Config,'ASK'), 1); + SysConfig.Volume := StrToFloatDef(queryConfigSql(t_Config,'Volume'), 0); + SysConfig.Tare := StrToFloatDef(queryConfigSql(t_Config,'Tare'), 1000); + + //新增开机启动延时时间 + if queryConfigSql(t_Config,'Delay')='' then + insertConfigSql(t_Config,9,'Delay','10'); + SysConfig.delay := StrToIntDef(queryConfigSql(t_Config,'Delay'), 0); + + //记录日志 + log4info(Format('系统:载入 %s-系统参数 (设备参数).',[t_Config])); + end; + + //加载通讯参数 + if FileExists(glConn_db) then begin + PlcConn.ip := queryConfigSql(t_Conn,'Ip'); + PlcConn.port := StrToIntDef(queryConfigSql(t_Conn,'Port'), 1502); + WrConn.SerialPort := queryConfigSql(t_Conn,'SerialPort'); + WrConn.baud := StrToIntDef(queryConfigSql(t_Conn,'Baud'), 115200); + WrConn.data_bit := StrToIntDef(queryConfigSql(t_Conn,'Data_bit'), 8); + WrConn.stop_bit := StrToIntDef(queryConfigSql(t_Conn,'Stop_bit'), 1); + glAutoRun := StrToBoolDef(queryConfigSql(t_Conn,'AutoRun'), False); + glTime1 := StrToIntDef(queryConfigSql(t_Conn,'Time1'), 20); + glTime2 := StrToIntDef(queryConfigSql(t_Conn,'Time2'), 30); + //单独处理char类型 + CopyMemory(@c, PChar(queryConfigSql(t_Conn,'Parity')), 1); + WrConn.parity := c; + + //新增数据存储参数 + if queryConfigCnt(t_Conn, 'AutoSave')=0 then + insertConfigSql(t_Conn, 11, 'AutoSave', '0'); + if queryConfigCnt(t_Conn, 'SamplePrefix')=0 then + insertConfigSql(t_Conn, 12, 'SamplePrefix', ''); + if queryConfigCnt(t_Conn, 'SampleDir')=0 then + insertConfigSql(t_Conn, 13, 'SampleDir', ''); + if queryConfigCnt(t_Conn, 'SampleName')=0 then + insertConfigSql(t_Conn, 14, 'SampleName', ''); + smp.flag := StrToBoolDef(queryConfigSql(t_Conn,'AutoSave'), False); + smp.prefix := queryConfigSql(t_Conn,'SamplePrefix'); + smp.dir := queryConfigSql(t_Conn,'SampleDir'); + smp.info := queryConfigSql(t_Conn,'SampleName'); + + //记录日志 + log4info(Format('系统:载入 %s-系统参数 (PLC、水分仪、存储参数).',[t_Conn])); + end; + + //加载粮种校准系数 + if FileExists(glGrain_db) then begin + Grain := queryGrainSql(t_Grain,'小麦'); + log4info(Format('系统:载入 %s-粮种参数 (粮种代码、名称、校准系数).',[t_Grain])); + end; + + //加载重量校准系数 + if FileExists(glWeight_db) then begin + Wg.k := StrToFloatDef(queryConfigSql(t_Weight,'k'), 1); + Wg.b := StrToFloatDef(queryConfigSql(t_Weight,'b'), 1); + Wg.tare := StrToFloatDef(queryConfigSql(t_Weight,'tare'), 0); + Wg.range := StrToFloatDef(queryConfigSql(t_Weight,'range'), 0); + Wg.test1 := StrToFloatDef(queryConfigSql(t_Weight,'test1'),0); + Wg.test2 := StrToFloatDef(queryConfigSql(t_Weight,'test2'),0); + Wg.test3 := StrToFloatDef(queryConfigSql(t_Weight,'test3'),0); + Wg.std1 := StrToFloatDef(queryConfigSql(t_Weight,'std1'), 0); + Wg.std2 := StrToFloatDef(queryConfigSql(t_Weight,'std2'), 0); + Wg.std3 := StrToFloatDef(queryConfigSql(t_Weight,'std3'), 0); + //记录日志 + log4info(Format('系统:载入 %s-系统参数 (y=kx+b).',[t_Weight])); + end; + + //加载登录口令 + if FileExists(glManager_db) then begin + SysConfig.password := queryConfigSql(t_Manager,'Admin'); + //记录日志 + log4info(Format('系统:载入 %s-管理参数 (手动模式口令).',[t_Manager])); + end; + //调试参数 + //showmessage(Format('PLC IP: %s:%d',[plcconn.ip, plcconn.prot])); + //showmessage(Format('Wr :%s,%d,%s,%d,%d',[wrconn.SerialPort,wrconn.baud,wrconn.parity,wrconn.data_bit,wrconn.stop_bit])); +end; + +//保存各类参数结构 +procedure SaveParam(); +begin + //保存系统参数 + if FileExists(glConfig_db) then begin + updateConfigSql(t_Config,'StartFreq',FloatToStr(SysConfig.StartFreq)); + updateConfigSql(t_Config,'StopFreq',FloatToStr(SysConfig.StopFreq)); + updateConfigSql(t_Config,'Step', IntToStr(SysConfig.Step)); + updateConfigSql(t_Config,'Freq',FloatToStr(SysConfig.Freq)); + updateConfigSql(t_Config,'Decay',FloatToStr(SysConfig.Decay)); + updateConfigSql(t_Config,'ASK', IntToStr(SysConfig.ASK)); + updateConfigSql(t_Config,'Volume',FloatToStr(SysConfig.Volume)); + updateConfigSql(t_Config,'Tare',FloatToStr(SysConfig.Tare)); + updateConfigSql(t_Config,'Delay', IntToStr(SysConfig.delay)); + //记录日志 + log4info(Format('系统:保存 %s-系统参数 (设备参数).',[t_Config])); + end; + //保存通讯参数 + if FileExists(glConn_db) then begin + updateConfigSql(t_Conn,'Ip',PlcConn.ip); + updateConfigSql(t_Conn,'Port',IntToStr(PlcConn.port)); + updateConfigSql(t_Conn,'SerialPort',WrConn.SerialPort); + updateConfigSql(t_Conn,'Baud',IntToStr(WrConn.baud)); + updateConfigSql(t_Conn,'Parity',WrConn.Parity); + updateConfigSql(t_Conn,'Data_bit',IntToStr(WrConn.Data_bit)); + updateConfigSql(t_Conn,'Stop_bit',IntToStr(WrConn.Stop_bit)); + updateConfigSql(t_Conn,'AutoRun',BoolToString(glAutoRun)); + updateConfigSql(t_Conn,'Time1',IntToStr(glTime1)); + updateConfigSql(t_Conn,'Time2',IntToStr(glTime2)); + //增加数据存储参数 + updateConfigSql(t_Conn,'AutoSave',BoolToString(smp.flag)); + updateConfigSql(t_Conn,'SamplePrefix',smp.prefix); + updateConfigSql(t_Conn,'SampleDir', smp.dir); + updateConfigSql(t_Conn,'SampleName', smp.info); + //记录日志 + log4info(Format('系统:保存 %s-系统参数 (PLC、水分仪、存储参数).',[t_Conn])); + end; + + //保存登录口令 + if FileExists(glManager_db) then begin + updateConfigSql(t_Manager,'Admin',SysConfig.password); + //记录日志 + log4info(Format('系统:保存 %s-管理参数 (手动模式口令).',[t_Manager])); + end; + + //保存重量系数 + SaveWgParam(); +end; + +//保存重量参数 +procedure SaveWgParam(); +begin + //保存重量系数 + if FileExists(glWeight_db) then begin + updateConfigSql(t_Weight,'k',FloatToStr(Wg.k)); + updateConfigSql(t_Weight,'b',FloatToStr(Wg.b)); + updateConfigSql(t_Weight,'tare',FloatToStr(Wg.tare)); + updateConfigSql(t_Weight,'range',FloatToStr(Wg.range)); + updateConfigSql(t_Weight,'test1',FloatToStr(Wg.test1)); + updateConfigSql(t_Weight,'test2',FloatToStr(Wg.test2)); + updateConfigSql(t_Weight,'test3',FloatToStr(Wg.test3)); + updateConfigSql(t_Weight,'std1',FloatToStr(Wg.std1)); + updateConfigSql(t_Weight,'std2',FloatToStr(Wg.std2)); + updateConfigSql(t_Weight,'std3',FloatToStr(Wg.std3)); + + //记录日志 + log4info(Format('系统:保存 %s-参数 (y=kx+b).',[t_Weight])); + end; +end; + +//保存校准参数到数据库 +procedure SaveVerifyParam(); +begin + //保存粮种关联的校准系数 + if FileExists(glGrain_db) then begin + updateGrainSql(t_Grain, Grain); + log4info(Format('系统:保存 %s-粮种参数 (五个校准系数).',[t_Grain])); + end; +end; + +//保存截距参数到数据库 +procedure SaveInterceptParam(val:string); +begin + //grain.db新增一列,用于保存截距参数 + if FileExists(glGrain_db) then begin + updateInterceptSql(t_Grain,val,Grain.Name); + log4info(Format('系统:保存截距参数-[%s] 到 [%s]粮种信息.',[val, Grain.Name])); + end; +end; + +end. -- Gitblit v1.9.3