【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之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;
相关文章
|
6月前
|
监控 API 数据安全/隐私保护
屏幕监控软件开发指南:C++实现原理解析
在当今数字化时代,屏幕监控软件成为了企业管理和个人隐私保护的重要工具。本文将深入探讨如何使用C++语言实现屏幕监控软件,并解析其实现原理。我们将通过多个代码示例来说明其工作方式,最后将介绍如何将监控到的数据自动提交到网站。
191 3
|
6月前
|
安全 Java 测试技术
在线音乐播放系统的设计与实现(论文+源码)_kaic
在线音乐播放系统的设计与实现(论文+源码)_kaic
|
存储 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
|
机器学习/深度学习 算法 数据可视化
实时车辆行人多目标检测与跟踪系统-上篇(UI界面清新版,Python代码)
实时车辆行人多目标检测与跟踪系统-上篇(UI界面清新版,Python代码)
288 1
|
存储 数据库 数据安全/隐私保护
大型医院PACS系统源代码,VC + MSSQL开发,专业高级三维后处理功能
本套PACS系统为医院提供一个包括放射、超声、核医学、病理、内窥镜、心电图室在内的所有影像检查数字化的一体化解决方案。 它涵盖了传统PACS和RIS系统的所有功能,以构建全数字化影像科为目标,致力于实现对医院所有影像数据的统一管理、影像检查工作流的自动化,及影像诊断的智能化。
202 0
大型医院PACS系统源代码,VC + MSSQL开发,专业高级三维后处理功能
|
机器学习/深度学习 存储 固态存储
ARM-CPU150FPS | PicoDet助力移动端达到超实时检测(强烈建议工程人员学习)(一)
ARM-CPU150FPS | PicoDet助力移动端达到超实时检测(强烈建议工程人员学习)(一)
173 0