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();
procedure TMainFrm.advBtnConfirmClick(Sender: TObject);
begin
if mmSendMsg.Lines.Count <= then
begin
Application.MessageBox('There is no key word, please check the MsgSendList,thanks.', 'Error Information', MB_OK + MB_ICONSTOP);
mmSendMsg.SetFocus;
Exit;
end;
if cbByte.Checked then
begin
SendHex(mmSendMsg.Text);
end
else
begin
comMain.WriteCommData(PChar(mmSendMsg.Text), Length(mmSendMsg.Text));
end;
if (cbAutoSend.Checked) and (edtTime.Text <> '') and (cbByte.Checked) then
begin
timerMain.Interval := StrToInt(edtTime.Text);
timerMain.Enabled := True;
end;
end;
SendHex函数
procedure TMainFrm.SendHex(S: string);
var
s2: string;
buf1: array[..] of char;
i: integer;
begin
s2 := '';
for i := to length(s) do
begin
if ((copy(s, i, ) >= '') and (copy(s, i, ) <= '')) or ((copy(s, i, ) >= 'a') and (copy(s, i, ) <= 'f'))
or ((copy(s, i, ) >= 'A') and (copy(s, i, ) <= 'F')) then
begin
s2 := s2 + copy(s, i, );
end;
end;
for i := to (length(s2) div - ) do
buf1[i] := char(strtoint('$' + copy(s2, i * + , )));
comMain.WriteCommData(buf1, (length(s2) div ));
mmMsg.Lines.Add('MsgSend[' + S + ']');
end;
接收指令
选中控件,添加OnReceiveError事件,代码如下。
procedure TMainFrm.comMainReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
S: string;
I, L: INTEGER;
RBUF: array[..] of BYTE;
begin
Move(Buffer^, pchar(@rbuf)^, BufferLength);
L := BufferLength;
for I := to L - do
begin
S := S + INTTOHEX(RBUF[I], );
end;
mmMsg.Lines.Add('MsgReceived[' + S + ']');
end;
断开串口连接
comMain.StopComm;
附录
unit uMain; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, SPComm, RzPanel, AdvSmoothButton,
AdvSmoothStatusIndicator, AdvGlassButton, RzButton, RzRadChk, RzStatus,
RzPrgres; type
TMainFrm = class(TForm)
gbSerialParams: TRzGroupBox;
gbMsg: TRzGroupBox;
mmMsg: TMemo;
gbPortSet: TRzGroupBox;
gbSendMsg: TRzGroupBox;
lbCom: TLabel;
lbStopBit: TLabel;
lbByteSize: TLabel;
lbCheckBit: TLabel;
lbBaudRate: TLabel;
comMain: TComm;
cbbCOM: TComboBox;
cbbStopBit: TComboBox;
cbbByteSize: TComboBox;
cbbBaudRate: TComboBox;
cbbCheckBit: TComboBox;
gbMsgSendParams: TRzGroupBox;
gbMsgSendList: TRzGroupBox;
cbByte: TRzCheckBox;
cbAutoSend: TRzCheckBox;
lbCT: TLabel;
edtTime: TEdit;
advBtnConfirm: TAdvGlassButton;
advBtnConnect: TAdvGlassButton;
AdvGlassButton1: TAdvGlassButton;
lbMs: TLabel;
mmSendMsg: TMemo;
statusBar: TRzStatusBar;
clock: TRzClockStatus;
versionStatus: TRzVersionInfoStatus;
mqStatus: TRzMarqueeStatus;
progressBar: TRzProgressBar;
connectStatus: TRzStatusPane;
timerMain: TTimer;
procedure advBtnConnectClick(Sender: TObject);
procedure comMainReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure advBtnConfirmClick(Sender: TObject);
procedure SendHex(S: string);
procedure AdvGlassButton1Click(Sender: TObject);
procedure timerMainTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
MainFrm: TMainFrm; implementation {$R *.dfm} procedure TMainFrm.SendHex(S: string);
var
s2: string;
buf1: array[..] of char;
i: integer;
begin
s2 := '';
for i := to length(s) do
begin
if ((copy(s, i, ) >= '') and (copy(s, i, ) <= '')) or ((copy(s, i, ) >= 'a') and (copy(s, i, ) <= 'f'))
or ((copy(s, i, ) >= 'A') and (copy(s, i, ) <= 'F')) then
begin
s2 := s2 + copy(s, i, );
end;
end;
for i := to (length(s2) div - ) do
buf1[i] := char(strtoint('$' + copy(s2, i * + , )));
comMain.WriteCommData(buf1, (length(s2) div ));
mmMsg.Lines.Add('MsgSend[' + S + ']');
end; procedure TMainFrm.advBtnConnectClick(Sender: TObject);
var
serialPortNO: string;
begin
try
with comMain do
begin
StopComm;
serialPortNO := Copy(cbbCOM.Text, , Length(cbbCOM.Text) - );
BaudRate := StrToInt(cbbBaudRate.Text);
// ByteSize := TByteSize(cbbByteSize.ItemIndex);
// StopBits := TStopBits(cbbStopBit.ItemIndex);
// Parity := TParity(cbbCheckBit.ItemIndex);
if StrToInt(serialPortNO) > then
begin
CommName := '//./' + cbbCOM.Text;
end
else
begin
CommName := cbbCOM.Text;
end;
comMain.StartComm;
connectStatus.Caption := 'Connected';
connectStatus.FillColor := clLime;
advBtnConnect.Enabled := False;
gbSendMsg.Enabled := True;
end;
except
connectStatus.Caption := 'Not Connected';
connectStatus.FillColor := clRed;
gbSendMsg.Enabled := False;
end; end; procedure TMainFrm.comMainReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
S: string;
I, L: INTEGER;
RBUF: array[..] of BYTE;
begin
Move(Buffer^, pchar(@rbuf)^, BufferLength);
L := BufferLength;
for I := to L - do
begin
S := S + INTTOHEX(RBUF[I], );
end;
mmMsg.Lines.Add('MsgReceived[' + S + ']');
end;
//var
// tmpArray: array[0..4096] of Byte;
// i: DWORD;
// tmpStr: string;
// pStr: PChar;
//begin
// pStr := Buffer;
// tmpStr := string(pStr);
// mmMsg.Lines.Add(tmpStr);
// Dec(PStr);
// for i := 0 to Length(tmpStr) - 1 do
// begin
// inc(PStr);
// tmpArray[i] := Byte(PSTR^);
// mmMsg.Lines.Add(IntToHEX(Ord(tmpArray[i]), 2));
// end;
// exit;
// pStr := Buffer;
// mmMsg.Lines.Add(pStr);
//end; procedure TMainFrm.advBtnConfirmClick(Sender: TObject);
begin
if mmSendMsg.Lines.Count <= then
begin
Application.MessageBox('There is no key word, please check the MsgSendList,thanks.', 'Error Information', MB_OK + MB_ICONSTOP);
mmSendMsg.SetFocus;
Exit;
end;
if cbByte.Checked then
begin
SendHex(mmSendMsg.Text);
end
else
begin
comMain.WriteCommData(PChar(mmSendMsg.Text), Length(mmSendMsg.Text));
end;
if (cbAutoSend.Checked) and (edtTime.Text <> '') and (cbByte.Checked) then
begin
timerMain.Interval := StrToInt(edtTime.Text);
timerMain.Enabled := True;
end;
end; procedure TMainFrm.AdvGlassButton1Click(Sender: TObject);
begin
timerMain.Enabled := False;
gbSendMsg.Enabled := False;
cbByte.Checked := False;
cbAutoSend.Checked := False;
edtTime.Text := '';
mmMsg.Text := '';
mmSendMsg.Text := '';
comMain.StopComm;
connectStatus.Caption := 'Not Connected';
connectStatus.FillColor := clRed;
advBtnConnect.Enabled := True;
end; procedure TMainFrm.timerMainTimer(Sender: TObject);
begin
SendHex(mmSendMsg.Text);
end; end.
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Delphi - 采用第三方控件TMS、SPComm开发串口调试助手的更多相关文章
- delphi使用 第三方控件
第三方控件安装时必须把所有的pas,dcu,dpk,res等文件复制到你的Lib目录下 然后通过dpk进行安装 安装后会多出来新的控件面板,新控件就在那里了 当然也有一些控件会安装到原有的面板上 比如 ...
- 基于.Net C# 通信开发-串口调试助手
基于.Net C# 通信开发-串口调试助手 1.概述 串口调试助手,广泛应用于工控领域的数据监控.数据采集.数据分析等工作,可以帮助串口应用设计.开发.测试人员检查所开发的串口应用软硬件的数据收发状况 ...
- delphi ----Raize(第三方控件) TRzNumericEdit
一.Raize Edits 1.TRzNumericEdit IntegerOnly属性设置为false,可以输入小数. DisplayFormat := ',0.00;(,0.00)';;//小数默 ...
- Delphi7第三方控件
控件安装(安装时建议先关闭Delphi) 1.只有一个DCU文件的组件. DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本 ...
- 教程-Delphi第三方控件安装卸载指南
1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...
- Delphi中代替WebBrowser控件的第三方控件
这几天,接触到在delphi中内嵌网页,用delphi7自带的TWebBrowser控件,显示的内容与本机IE8显示的不一样,但是跟装IE8之前的IE6显示一个效果.现在赶脚是下面两个原因中的一个: ...
- Delphi第三方控件安装卸载指南
基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install; 2.对于带*.dpk文件的控件包,File--& ...
- iOS开发无第三方控件的援助达到的效果侧边栏
最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hu ...
- Delphi连接Oracle控件ODAC的安装及使用(轉載)
Delphi连接Oracle控件ODAC的安装及使用 2010-08-13 01:13:37 标签:Oracle Delphi 控件 休闲 ODAC 原创作品,允许转载,转载时请务必以超链接形式标明 ...
随机推荐
- 学习CNN系列二:训练过程
卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入.输出之间映射的 ...
- 3.3 Spark的部署和应用方式
一.Spark的部署 1.单机Local 2.集群 (1)Standalonc Spark自带的资源管理器,效率不高 (2)YARN 如果部署的是Hadoop集群,可以用YARN资源调度 (3)Mes ...
- 编译一个支持django及mysqlclient连接的alpine镜像
一切都不难,难的就是在alpine镜像里. 最后,使用了网上编译好mysqlclient的镜像,才搞定. 记录一下. 一,基础镜像Dockerfile https://github.com/tnir/ ...
- USB摄像头驱动框架分析
usb摄像头驱动程序,里面涉及硬件的操作.比如说,想设置亮度的时候,需要把亮度的参数发给硬件.去得到真正视频数据的时候,需要访问硬件得到数据.usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的 ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...
- Linux sh、source和.命令执行.sh文件的区别
sh文件介绍 .sh为Linux的脚本文件,我们可以通过.sh执行一些命令,可以理解为windows的.bat批处理文件. 点命令 .命令和source是同一个命令,可以理解为source的缩写,简称 ...
- 打开navicat 报错????
好心好意打开数据库图形化管理工具居然报错了???? 那怎么办呢????? google一下吧...... 下载两个文件 就是这两个 放入你的图形化页面的目录中 就可以正常打开了 帅不帅??? 那怎么下 ...
- 11/3 <binary search>
278. First Bad Version 二分法,如果isBadVersion返回true则坏版本在左边,right = mid,否则 left = mid + 1. 注意溢出问题 left+(r ...
- [LeetCode] 90. Subsets II 子集合之二
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- 《30天自制操作系统》笔记5 --- (Day3)
这个专题荒废了许久,今天补点东西 不够准确的小结 用汇编来开发操作系统,就是使用汇编本身的功能再加上BIOS中断提供的功能来完成功能的过程. 汇编本身的功能不够,毕竟没有外部IO,所以通过给多个寄存器 ...