【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit4-Form4系统设置界面

简介: 【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit4-Form4系统设置界面

下面介绍Unit4系统设置界面的实现。

 


orm4主要实现的就是系统的设置,系统的设置主要包含:1.设置串口,2.增、删、改负载特征矩阵,3.下传负载特征矩阵,4.设置数据库路径。

其中第2点再后续的form6,form7,form8中讲解。

1.下传负载特征矩阵

先来展示所有源码:

procedure TForm4.TeButton1Click(Sender: TObject);
var
  i,j,flag,k : integer; //改maxIndex为全局变量了
  tempVal : single;
  hex,strHex : string;
begin
    form1.IBdatabase1.Connected:=true;
    form1.IBquery1.Close;
    form1.ibquery1.SQL.Clear;
    form1.ibquery1.SQL.Add('select max(loadIndex) from loadmatrix');
    form1.ibquery1.Open;  //这时值已经放到IBQuery中了
    maxIndex := form1.IBQuery1.FieldByName('max').AsInteger ;//取出最大的矩阵行号
    teprogressbar1.Position := 0;
    teprogressbar1.Min :=0;
    teprogressbar1.Max :=maxIndex * 6 * 10 * 3;//计算最大量
    teprogressbar1.Step := 1;
    form1.comport1.Port := ckCombo.Items[ckCombo.ItemIndex];//由unit4选择串口号
    form1.comport1.BaudRate := br9600;
    if form1.ComPort1.Connected = false then
    begin
      flag := 0;//记录串口的初始状态 0表示初始串口关着呢
      form1.ComPort1.Open;
    end
    else
      flag := 1;//1表示初始串口开着呢
    for k := 0 to 2 do //为了保险,矩阵数据下传3遍
    begin
      for i := 1 to maxIndex do //i代表矩阵行号
      begin
        form1.ibquery1.SQL.Clear;
        form1.IBQuery1.SQL.Add('select * from loadMatrix where loadIndex = :A');
        Form1.IBQuery1.Params.ParamByName('A').Value := i;
        form1.ibquery1.Open;  //这时值已经放到IBQuery中了
        //发相位
        tempVal := form1.ibquery1.FieldByName('phase').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'0'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据 调用Hexstrtostr函数
          tememo1.Text := tememo1.Text + strHex + #13#10;//#13 #10 memo换行
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text ); //一直让memo显示最后一行
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
        //发谐波1
        tempVal := form1.ibquery1.FieldByName('har1').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'1'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据
          tememo1.Text := tememo1.Text + strHex+ #13#10;
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text );
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
        //发谐波3
        tempVal := form1.ibquery1.FieldByName('phase').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'2'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据
          tememo1.Text := tememo1.Text + strHex+ #13#10;
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text );
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
        //发谐波5
        tempVal := form1.ibquery1.FieldByName('har1').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'3'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据
          tememo1.Text := tememo1.Text + strHex+ #13#10;
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text );
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
        //发谐波7
        tempVal := form1.ibquery1.FieldByName('phase').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'4'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据
          tememo1.Text := tememo1.Text + strHex+ #13#10;
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text );
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
        //发谐波9
        tempVal := form1.ibquery1.FieldByName('har1').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'5'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据
          tememo1.Text := tememo1.Text + strHex+ #13#10;
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text );
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;
      end;
    end;
    ShowMessage('下载完成');
    if flag = 0 then
      form1.ComPort1.Connected := false; //恢复串口的初始状态
end;

上面的结构大体如下:

for k//传3遍
  for i//矩阵的行号
  1.发相位
    for j 0~9//代表表号
  2.发谐波1
    for j 0~9//代表表号
  3.发谐波3
    for j 0~9//代表表号
  4.发谐波5
    for j 0~9//代表表号
  5.发谐波7
    for j 0~9//代表表号
  6.发谐波9
    for j 0~9//代表表号

以发送相位为例详细讲解:

        //发相位
        tempVal := form1.ibquery1.FieldByName('phase').AsFloat ;//取得相位
        hex := FloatToHex(tempVal);//将float数据转成4字节十六进制字符串
        for j := 0 to 9 do//j代表表号0~9
        begin
          strHex := '68 0'+inttostr(j)+' 30 00 00 00 00 68 04 08 fe fd '+inttostr(i-1)+'0'+hex+' 13 16';
          form1.comport1.WriteStr(Hexstrtostr(strHex));//发送数据 调用Hexstrtostr函数
          tememo1.Text := tememo1.Text + strHex + #13#10;//#13 #10 memo换行
          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text ); //一直让memo显示最后一行
          teprogressbar1.StepIt;//进度条加1
          Delay(500);
        end;

同样使用 ibquery1.FieldByName('phase').AsFloat 得到数据库中字段名为“phase”的数据内容,使用FloatToHex函数将float数据转为4字节十六进制。


根据645规约,将传输帧补齐,即strHex字符串,使用函数Hexstrtostr将字符串转为16进制,最后使用语句form1.comport1.WriteStr(Hexstrtostr(strHex));将命令帧下传。


最后,按一般习惯,显示窗口要一直显示当前发送的最后一帧数据,那么就要使用下面两句,使显示保持在最后一行:

          tememo1.SelStart := length(tememo1.Text );
          tememo1.SelLength := length(tememo1.Text ); //一直让memo显示最后一行

2.设置数据库路径

使用openDialog控件来打开文件。

使用如下语句即可得到文件的完整路径,其返回值是包含文件名的完整路径:

  if opendialog1.Execute  then
  begin
    tememo2.Text := opendialog1.FileName  ;
  end;
相关文章
WRF模式案例运行初体验--飓风示例全过程记录
本文主要记录一下首次学习WRF并运行官网案例的全过程。
WRF模式案例运行初体验--飓风示例全过程记录
|
6月前
|
人工智能 JSON 开发工具
基于Python开发的AI智能联系人管理程序(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的AI智能联系人管理程序(源码+可执行程序+程序配置说明书+程序使用说明书)
101 0
|
前端开发 项目管理
PMP知识系统(04)- 前端所有界面
PMP知识系统(04)- 前端所有界面
62 0
|
存储 SQL 监控
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit1-Form1主界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit1-Form1主界面
128 0
|
SQL 监控 数据库
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit2-Form2用户电量查询显示界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit2-Form2用户电量查询显示界面
|
监控
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面
|
存储 监控 网络协议
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之 总述
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之 总述
117 0
|
前端开发 BI C#
手麻系统源码,C# .net 桌面软件,采用下拉式汉化菜单,界面友好,实用性强
提供手术病人检索、手术申请、手术安排、急诊手术,查看手术申请单、查看手术通知单,填写病人术前会诊记录、谈话记录、麻醉记录,器械准备、手术记录、附加手术、器械清点及术后护理信息等功能。 提供手术查询、手术报表查询、术后信息统计等查询功能。
178 0
手麻系统源码,C# .net 桌面软件,采用下拉式汉化菜单,界面友好,实用性强
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
201 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
|
Java 测试技术 调度
JSP+Servlet培训班作业管理系统[1]-登录功能的简单实现
本文目录 1. 背景 2. 编写登录页面 3. 获取表单输入内容 3. 处理登录请求 4. 编写用户类 5. 封装登录服务 6. 完善登录控制 7. 跳转错误信息提示页面 7. 测试
144 0