【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之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;
相关文章
|
3月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
255 0
|
6月前
|
监控 API 数据安全/隐私保护
屏幕监控软件开发指南:C++实现原理解析
在当今数字化时代,屏幕监控软件成为了企业管理和个人隐私保护的重要工具。本文将深入探讨如何使用C++语言实现屏幕监控软件,并解析其实现原理。我们将通过多个代码示例来说明其工作方式,最后将介绍如何将监控到的数据自动提交到网站。
191 3
|
6月前
|
JSON 监控 安全
使用Objective-C开发的局域网监控微信的追踪系统
在当今数字化时代,随着社交软件的普及,人们越来越多地依赖于微信等应用来进行交流。然而,对于一些特定的情况,例如家长想要监控孩子的聊天记录,或者企业需要监督员工的通讯内容,开发一款能够监控微信的追踪系统显得尤为重要。在本文中,我们将介绍如何使用Objective-C语言来开发一款局域网监控微信的追踪系统,并且提供一些代码示例。
165 0
|
存储 SQL 监控
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit1-Form1主界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit1-Form1主界面
127 0
|
SQL 监控 数据库
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit2-Form2用户电量查询显示界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit2-Form2用户电量查询显示界面
|
监控
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面
|
存储 BI 数据安全/隐私保护
PACS系统源码 大型医院PACS/RIS源码 支持专业三维影像后处理功能,演示文档齐全
PACS系统可实现检查预约、病人信息登记、计算机阅片、电子报告书写、胶片打印、报表统计、数据备份等一系列满足影像科室日常工作的功能,并且由于影像数字化存储,用户可利用影像处理与测量技术辅助诊断、方便快捷地查找资料或利用网络将资料传输至临床科室,还可与医院HIS、LIS无缝连接。集成专业三维影像后处理功能:三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜、最大/小密度投影、心脏动脉钙化分析等。
156 0
PACS系统源码 大型医院PACS/RIS源码 支持专业三维影像后处理功能,演示文档齐全
|
存储 监控 网络协议
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之 总述
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之 总述
117 0
|
SQL 前端开发 Java
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】
200 0
校园外卖点餐系统——Day01【项目简介、开发环境搭建、后台系统登录和退出功能】