设为首页 加入收藏

TOP

Delphi - 采用第三方控件TMS、SPComm开发串口调试助手(一)
2019-09-04 00:59:57 】 浏览:367
Tags:Delphi 采用 第三方 控件 TMS SPComm 开发 串口 调试 助手

第三方控件TMS、SPComm的下载与安装

盒子上可搜索关键字进行下载,TMS是.dpk文件,SPComm.pas文件;

安装方法自行百度,不做赘述。

 

通过TMS控件进行界面布局

界面预览:

 

Delphi通过SPComm连接串口、发送和接收指令

连接串口

拖一个TComm控件到主窗体上,选中控件,单击F11,完成如下配置。

这里主要是将一些布尔类型的属性设置成False,其他属性在前台连接按钮事件下动态设置。 

连接代码如下,这里需要特别主意一下:

当串口参数超过COM9(即COM10、COM11、COM12...)的时候,SPComm单元中有此BUG,ComName这里不可以直接赋值,需要做如下处理。

CommName := '//./' + cbbCOM.Text;  

 1 procedure TMainFrm.advBtnConnectClick(Sender: TObject);  2 var  3 serialPortNO: string;  4 begin  5 try  6 with comMain do  7 begin  8  StopComm;  9 serialPortNO := Copy(cbbCOM.Text, 4, Length(cbbCOM.Text) - 3); 10 BaudRate := StrToInt(cbbBaudRate.Text); 11 // ByteSize := TByteSize(cbbByteSize.ItemIndex); 12 // StopBits := TStopBits(cbbStopBit.ItemIndex); 13 // Parity := TParity(cbbCheckBit.ItemIndex); 14 if StrToInt(serialPortNO) > 9 then 15 begin 16 CommName := '//./' + cbbCOM.Text; 17 end 18 else 19 begin 20 CommName := cbbCOM.Text; 21 end; 22  comMain.StartComm; 23 connectStatus.Caption := 'Connected'; 24 connectStatus.FillColor := clLime; 25 advBtnConnect.Enabled := False; 26 gbSendMsg.Enabled := True; 27 end; 28 except 29 connectStatus.Caption := 'Not Connected'; 30 connectStatus.FillColor := clRed; 31 gbSendMsg.Enabled := False; 32 end; 33 34 end;

 

发送指令

WriteCommData(); 

 1 procedure TMainFrm.advBtnConfirmClick(Sender: TObject);
 2 begin
 3   if mmSendMsg.Lines.Count <= 0 then
 4   begin
 5     Application.MessageBox('There is no key word, please check the MsgSendList,thanks.', 'Error Information', MB_OK + MB_ICONSTOP);
 6     mmSendMsg.SetFocus;
 7     Exit;
 8   end;
 9   if cbByte.Checked then
10   begin
11     SendHex(mmSendMsg.Text);
12   end
13   else
14   begin
15     comMain.WriteCommData(PChar(mmSendMsg.Text), Length(mmSendMsg.Text));
16   end;
17   if (cbAutoSend.Checked) and (edtTime.Text <> '') and (cbByte.Checked) then
18   begin
19     timerMain.Interval := StrToInt(edtTime.Text);
20     timerMain.Enabled := True;
21   end;
22 end;

SendHex函数 

 1 procedure TMainFrm.SendHex(S: string);
 2 var
 3   s2: string;
 4   buf1: array[0..50000] of char;
 5   i: integer;
 6 begin
 7   s2 := '';
 8   for i := 1 to length(s) do
 9   begin
10     if ((copy(s, i, 1) >= '0') and (copy(s, i, 1) <= '9')) or ((copy(s, i, 1) >= 'a') and (copy(s, i, 1) <= 'f'))
11       or ((copy(s, i, 1) >= 'A') and (copy(s, i, 1) <= 'F')) then
12     begin
13       s2 := s2 + copy(s, i, 1);
14     end;
15   end;
16   for i := 0 to (length(s2) div 2 - 1) do
17     buf1[i] := char(strtoint('$' + copy(s2, i * 2 + 1, 2)));
18   comMain.WriteCommData(buf1, (length(s2) div 2));
19   mmMsg.Lines.Add('MsgSend[' + S + ']');
20 end;

接收指令

选中控件,添加OnReceiveError事件,代码如下。

 1 procedure TMainFrm.comMainReceiveData(Sender: TObject; Buffer: Pointer;
 2   BufferLength: Word);
 3 var
 4   S: string;
 5   I, L: INTEGER;
 6   RBUF: array[0..2048] of BYTE;
 7 begin
 8   Move(Buffer^, pchar(@rbuf)^, BufferLength);
 9   L := BufferLength;
10   for I := 0 to L - 1 do
11   begin
12     S := S + INTTOHEX(RBUF[I], 2);
13   end;
14   mmMsg.Lines.Add('MsgReceived[' + S + ']');
15 end;

断开串口连接

comMain.StopComm;

附录

  1 unit uMain;
  2 
  3 interface
  4 
  5 uses
  6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7   Dialogs, StdCtrls, ExtCtrls, SPComm, RzPanel, AdvSmoothButton,
  8   AdvSmoothStatusIndicator, AdvGlassButton, RzButton, RzRadChk, RzStatus,
  9   RzPrgres;
 10 
 11 type
 12   TMainFrm = class(TForm)
 13
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Delphi - 创建SuperDll 持续更新 下一篇Delphi - 互斥对象下实现系统的单..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目