apdcomport操作串口实例
以前准备写一个关于adpcommport的使用实例,后来由于时间太少么有写,看了baidu的统计,感觉不少同学比较关注这个东西,我给最新我写的一个软件的部分代码给贴上来,并做一些必要的说明,如果有什么不妥的地方希望大家给扔块转头!
unit commmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OoMisc, AdPort, StdCtrls, ExtCtrls, ComCtrls, AdStatLt,IniFiles;
type
Tdig=record
util:string;
id:string;
end;
TMainForm = class(TForm)
ComPort1: TApdComPort;
Panel3: TPanel;
Btn_ClearView: TButton;
StatusBar: TStatusBar;
Btn_SaveView: TButton;
Panel4: TPanel;
CB_StopBits: TComboBox;
Label3: TLabel;
Label5: TLabel;
CB_DataBits: TComboBox;
CB_Parity: TComboBox;
Label4: TLabel;
Label2: TLabel;
CB_Baud: TComboBox;
CB_ComNum: TComboBox;
Label1: TLabel;
Btn_Reset: TButton;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
Timer_AutoSend: TTimer;
CB_Clear: TCheckBox;
CB_HexGet: TCheckBox;
CB_StopShow: TCheckBox;
Timer_WatchState: TTimer;
Shape_ComState: TShape;
GroupBox2: TGroupBox;
DW_ComBox: TComboBox;
Button1: TButton;
Button2: TButton;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
GroupBox4: TGroupBox;
ManyMemo: TMemo;
CB_many: TCheckBox;
CB_hexSend: TCheckBox;
GroupBox7: TGroupBox;
Label14: TLabel;
Edit2: TEdit;
Label15: TLabel;
Edit3: TEdit;
Label16: TLabel;
Edit4: TEdit;
Label17: TLabel;
Panel5: TPanel;
GroupBox1: TGroupBox;
GroupBox3: TGroupBox;
Label12: TLabel;
CheckBox2: TCheckBox;
Label13: TLabel;
dbbl: TEdit;
Label18: TLabel;
dbys: TComboBox;
GroupBox5: TGroupBox;
Label20: TLabel;
ComboBox2: TComboBox;
Label21: TLabel;
Edit6: TEdit;
GroupBox6: TGroupBox;
Label8: TLabel;
z: TLabel;
DW_Id: TEdit;
DW_Edit: TEdit;
DW_Add: TButton;
ComboBox3: TComboBox;
Label23: TLabel;
Label24: TLabel;
Edit7: TEdit;
GroupBox8: TGroupBox;
Label25: TLabel;
Edit8: TEdit;
Label26: TLabel;
Edit9: TEdit;
Label27: TLabel;
Edit10: TEdit;
Edit11: TEdit;
Label28: TLabel;
Edit12: TEdit;
Label29: TLabel;
Btn_Send: TButton;
Btn_CountReset: TButton;
SendMemo: TMemo;
CB_AutoSend: TCheckBox;
Label6: TLabel;
Edt_Interval: TEdit;
Label7: TLabel;
GroupBox9: TGroupBox;
Memo1: TMemo;
CheckBox4: TCheckBox;
GroupBox10: TGroupBox;
Label22: TLabel;
ComboBox4: TComboBox;
Label30: TLabel;
kjkd: TEdit;
CheckBox5: TCheckBox;
Label31: TLabel;
CheckBox3: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
Label19: TLabel;
Edit1: TEdit;
Label32: TLabel;
CheckBox8: TCheckBox;
sd: TCheckBox;
CheckBox10: TCheckBox;
Label33: TLabel;
zsw: TCheckBox;
zsj: TCheckBox;
yxw: TCheckBox;
yxj: TCheckBox;
mutilsend: TTimer;
Button4: TButton;
Memo_Show: TMemo;
Memojx: TMemo;
editCombox: TComboBox;
procedure ComPort1Trigger(CP: TObject; Msg, TriggerHandle,
Data: Word);
procedure diff(s:string);
procedure Btn_ResetClick(Sender: TObject);
procedure SendHex(S: String);
procedure Btn_SendClick(Sender: TObject);
procedure Btn_ClearViewClick(Sender: TObject);
procedure CB_ComNumSelect(Sender: TObject);
procedure Btn_SaveViewClick(Sender: TObject);
procedure CB_AutoSendClick(Sender: TObject);
procedure Edt_IntervalKeyPress(Sender: TObject; var Key: Char);
procedure Timer_AutoSendTimer(Sender: TObject);
procedure Memo_ShowChange(Sender: TObject);
procedure leijia(s:string);
procedure zhuhang(s:string);
procedure ComPortInit;
procedure InitDate;
procedure FormShow(Sender: TObject);
procedure Btn_CountResetClick(Sender: TObject);
procedure Timer_WatchStateTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Label9Click(Sender: TObject);
procedure Label10Click(Sender: TObject);
procedure DW_AddClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DW_ComBoxChange(Sender: TObject);
procedure CB_manyClick(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure CheckBox6Click(Sender: TObject);
procedure Edit7Click(Sender: TObject);
procedure CheckBox10Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure ManyMemoChange(Sender: TObject);
procedure mutilsendTimer(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure StatusBarClick(Sender: TObject);
procedure StatusBarDblClick(Sender: TObject);
private
{ Private declarations }
diglist: array[0..30] of Tdig;
procedure myMemoAddText(strAdd : string);
procedure init();
public
{ Public declarations }
end;
const
version='定位控制器 1.0版';
SoftName='定位控制器';
var
MainForm : TMainForm;
JSdate,FSdate : integer;
var dbkmlList:TStringList;
gjkmlList:TStringList;
num:integer;
implementation
{$R *.dfm}
//显示隐藏
procedure TMainForm.myMemoAddText(strAdd : string);
var
str : string;
begin
str := Memo_Show.Lines[Memo_Show.Lines.Count-1];
Memo_Show.Lines[Memo_Show.Lines.Count-1] := str+strAdd
end;
//累加显示
procedure TMainForm.leijia(s:string);
begin
myMemoAddText(s);
end;
//逐行显示
procedure TMainForm.zhuhang(s:string);
begin
Memo_Show.Lines.Add(s);
end;
procedure TMainForm.diff(s:string);
begin
if not CB_StopShow.Checked then
Leijia(s);
end;
//接收数据
procedure TMainForm.ComPort1Trigger(CP: TObject; Msg, TriggerHandle,
Data: Word);
var
I : Word;
C : Char;
s : String;
begin
try
case Msg of
APW_TRIGGERDATA :
{got 'login', send response}
;
APW_TRIGGERAVAIL :
{extract and display/process the data}
begin
s:='';
for I:= 1 to Data do
begin
C := ComPort1.GetChar;
if CB_hexGet.Checked then
begin
s:=s+inttohex(byte(c),2)+' ';
end else
s:=s+c;
inc(JSdate);
end;
StatusBar.Panels.Items[2].Text:='接收:'+inttostr(JSdate);
// str:=copy(s,8,4)+'号目标,'+'当前纬度:' +copy(s,12,7)+',经度:'+copy(s,19,8)+',速度:'+copy(s,27,3)+',高度:'+copy(s,34,6);
Diff(s);
end;
APW_TRIGGERTIMER :
{timed out waiting for login prompt, handle error}
;
end;
except
end;
end;
//发送16进制数据
procedure TMainForm.SendHex(S: String);
var
s2:string;
buf1:array[0..50000] of byte;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2:=s2+copy(s,i,1);
end;
end;
for i:=0 to (length(s2) div 2-1) do
begin
buf1[i]:=strtoint('$'+copy(s2,i*2+1,2));
end;
MainForm.ComPort1.PutBlock(buf1,(length(s2) div 2));
end;
//等待串口发送完毕
procedure waitcommEmpty;
var
t:integer;
begin
t:=0;
while (MainForm.ComPort1.OutBuffUsed>0) or (t>100) do
begin
sleep(200);
inc(t);
end;
sleep(200);
end;
// 设置串口
procedure TMainForm.ComPortInit;
begin
try
ComPort1.Open:=false;
Shape_ComState.Brush.Color:=clRed;
sleep(50);
ComPort1.ComNumber:=CB_ComNum.ItemIndex+1;
ComPort1.Baud:=strtoint(CB_Baud.Text);
case CB_Parity.ItemIndex of
0:
ComPort1.Parity:=pEven;
1:
ComPort1.Parity:=pMark;
2:
ComPort1.Parity:=pNone;
3:
ComPort1.Parity:=pOdd;
4:
ComPort1.Parity:=pSpace;
else
ComPort1.Parity:=pNone;
end;
ComPort1.DataBits:=strtoint(CB_DataBits.Text);
ComPort1.StopBits:=strtoint(CB_StopBits.Text);
ComPort1.Open:=true;
except
showmessage('串口不存在或被占用。');
end;
end;
//设置计数器
procedure TMainForm.InitDate;
begin
JSdate:=0;
FSdate:=0;
StatusBar.Panels.Items[1].Text:='发送:0';
StatusBar.Panels.Items[2].Text:='接收:0';
end;
procedure TMainForm.Btn_ResetClick(Sender: TObject);
begin
ComPortInit;
end;
procedure TMainForm.Btn_SendClick(Sender: TObject);
var
s:string;
begin
s:=SendMemo.Text;
if ComPort1.Open then
begin
if CB_hexSend.Checked then
SendHex(S)
else
ComPort1.PutString(s);
FSdate:=FSdate+length(s);
StatusBar.Panels.Items[1].Text:='发送:'+inttostr(FSdate);
waitcommEmpty;
end else
showmessage('串口未打开。');
end;
procedure TMainForm.Btn_ClearViewClick(Sender: TObject);
begin
Memo_Show.Clear;
end;
procedure TMainForm.CB_ComNumSelect(Sender: TObject);
begin
ComPortInit;
end;
procedure TMainForm.Btn_SaveViewClick(Sender: TObject);
var s:string;
begin
if not DirectoryExists(S) then
begin
CreateDir(S);
S:='gps.txt';
Memo_show.Lines.Delete(0);
Memo_Show.Lines.SaveToFile(S);
end;
end;
procedure TMainForm.CB_AutoSendClick(Sender: TObject);
begin
if CB_AutoSend.Checked then
begin
if (CB_AutoSend.Checked=true)then
if ((strtoint(Edt_Interval.Text)/1000)<2) then
begin
showmessage('你选择的周期太短,可能会造成数据丢失,请输入大于2秒的周期!');
CB_AutoSend.Checked:=false;
end else
begin
Edt_Interval.Enabled:=false;
Timer_AutoSend.Interval:=strtoint(Edt_Interval.Text);
Timer_AutoSend.Enabled:=true;
end
end else begin
Timer_AutoSend.Enabled:=false;
Edt_interval.Enabled:=true;
end;
end;
procedure TMainForm.Edt_IntervalKeyPress(Sender: TObject; var Key: Char);
begin
if key=#8 then exit;
if (key>'9') or (key<'0') then
key:=#0;
end;
procedure TMainForm.Timer_AutoSendTimer(Sender: TObject);
begin
Btn_SendClick(Sender);
end;
procedure TMainForm.Btn_CountResetClick(Sender: TObject);
begin
InitDate;
end;
procedure TMainForm.Timer_WatchStateTimer(Sender: TObject);
begin
if ComPort1.Open then
Shape_ComState.Brush.Color:=clLime
else
Shape_ComState.Brush.Color:=clRed;
StatusBar.Panels.Items[0].Text:=datetimetostr(now);
StatusBar.Panels.Items[3].Text:=version;
end;
procedure TMainForm.Label9Click(Sender: TObject);
begin
MainForm.Width:=792;
label10.Visible:=true;
label9.Visible:=false;
end;
procedure TMainForm.CB_manyClick(Sender: TObject);
begin
manymemo.Clear;
if(CB_many.Checked) then
mutilsend.Interval:=strtoint(Edt_Interval.Text)
end;
procedure TMainForm.CheckBox3Click(Sender: TObject);
begin
if checkbox3.Checked then
groupbox5.Enabled:=true
else
groupbox5.Enabled:=false;
end;
procedure TMainForm.CheckBox6Click(Sender: TObject);
begin
if checkbox6.Checked=true then
groupbox7.Enabled:=true else
groupbox7.Enabled:=false;
end;
procedure TMainForm.Edit7Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit7.Text:=OpenDialog1.FileName;
end;
procedure TMainForm.CheckBox10Click(Sender: TObject);
begin
if(checkbox10.Checked)then
groupbox10.Enabled:=true;
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
editcombox.Items.Delete(editcombox.ItemIndex);
dw_combox.Items:=editcombox.Items;
showmessage('成功删除一条数据');
end;
procedure TMainForm.ManyMemoChange(Sender: TObject);
var i:integer;
begin
for i:=0 to manymemo.Lines.Count-1 do
begin
diglist[i].util:=copy(manymemo.Lines[i],0,pos('(',manymemo.Lines[i])-1);
diglist[i].id:=copy(manymemo.Lines[i],pos('(',manymemo.Lines[i])+1,4);
end;
end;
procedure TMainForm.mutilsendTimer(Sender: TObject);
begin
sendmemo.Clear;
sendmemo.Text:='$GPCMD,'+copy(manymemo.Lines[num],pos('(',manymemo.Lines[num])+1,4)+',01,000,000,00'+#13+#10;;
num:=num+1;
if(num>=manymemo.Lines.Count)then
num:=0;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Ini: TIniFile;
var i:integer;
begin
Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
try
for i:=0 to editComBox.Items.Count-1 do
begin
Ini.WriteString('单位','Id'+inttostr(i),DW_ComBox.Items[i]);
end;
finally
Ini.Free;
end;
end;
procedure TMainForm.StatusBarClick(Sender: TObject);
begin
groupbox2.Visible:=false;
mainform.ClientHeight:=20;
end;
procedure TMainForm.StatusBarDblClick(Sender: TObject);
begin
groupbox2.Visible:=true;
mainform.ClientHeight:=424;
end;
end.
adpcommport组件是一个操作串口很方便的组件,不需要依赖任何ocx控件,而且适用于很多编程平台,它接收数据主要就是用Trigger方法,使用起来非常简单,只不过是针对具体的内容加以灵活运用而已,数据接受按照不同调制解调器的通讯协议接收并解析就可以了,有什么问题,大家可以跟贴讨论!
相关推荐
Java 操作串口是计算机通信领域的一个...以上就是关于“java 操作串口实例 自己写的 jdk1.5”实例的主要知识点。通过学习和实践这个实例,开发者可以更好地理解 Java 如何处理串口通信,并能将其应用到自己的项目中。
为了确保通信的顺利进行,需要明确打印机支持的串行接口参数,包括波特率、校验位、数据位和停止位等。例如,打印机可能支持9600bps的波特率、无校验位、8位数据位和1个停止位。 ##### 程序流程 1. **初始化通信...
在这个仿真实例中,我们将深入探讨串行接口的工作原理、波特率的概念以及如何进行仿真。 首先,串行接口是一种数据传输方式,它按照位(bit)的顺序逐个发送或接收数据,相比于并行接口,串行接口占用的硬件资源更...
串口控件 delphi经常使用的控件 非常稳定好用
通过一系列丰富的属性和功能,ApdComPort为开发人员提供了控制串行端口的能力,从而实现微机与外部设备或微机之间的信息传输。 #### ApdComPort控件的关键属性与功能 1. **ComNumber**:此属性用于设置或返回串...
串口通信是指通过串行接口进行的数据传输,常见的是RS-232标准,它定义了电压、信号线、数据位、停止位、校验位等参数。在LabVIEW中,串口通信主要包括以下步骤: 1. **配置串口**:首先,需要设置串口参数,如波特...
这个“Android串口通信实例”项目是基于Android Studio的一个实战项目,已经过测试,能够有效地执行串口的各种操作,如配置、开启、发送和接收数据。下面将详细讲解Android串口通信的相关知识点。 1. **Android串口...
串口,即串行接口,通常指的是RS-232标准,它是一种用于计算机和外部设备之间通信的接口。在Windows系统中,串口通常被表示为COM端口,如COM1、COM2等。串口通信涉及的主要参数有波特率、数据位、停止位、校验位等。...
串口程序,以及传感器的上位机程序,已经验证过
总之,这个“java-串口操作 rxtx实例”是一个学习和实践Java串口通信的好资料,结合RXTX库和单例、单线程设计,可以有效地处理与硬件设备的串行通信任务。通过阅读文档、理解和运行实例代码,你将能够掌握Java环境下...
“PIC12F1822 串口实例”指的是基于Microchip公司的PIC12F1822微控制器实现的串行通信接口(Serial Communication Interface,SCI)的应用示例。该标题暗示我们将探讨如何配置并利用这款微控制器的UART(通用异步...
- Linux中的串口通常指的是TTY设备,如/dev/ttyS0, /dev/ttyUSB0等,它们是系统中与串行通信硬件交互的接口。 - 串口通信的两个基本参数是波特率(baud rate)和数据位(data bits),还有奇偶校验位、停止位和流...
串口通信允许计算机通过串行端口发送和接收数据,这在很多工程和科学应用中非常常见。下面我们将深入探讨VB 6.0中的串口编程实例及其相关知识点。 首先,我们需要了解串口的基本概念。串口,也称为COM口,是一种...
"mscomm"是Microsoft提供的一种通用串行通信控件,它封装了COM端口的操作,使得在VC等环境中进行串口通信变得更加简单。这个标签表明我们将在VC项目中使用MSComm控件来完成串口的读写操作。 在VC项目中添加MSComm...
### Linux下串口编程简单实例详解 #### 一、引言 随着嵌入式设备的广泛应用,串口作为计算机与嵌入式系统之间的重要通信手段,其编程技术变得尤为重要。Linux系统提供了丰富的API来支持串口编程,使得开发人员能够...
本文将深入探讨一个基于MFC的串口通信实例,帮助读者理解如何在MFC应用中实现串口的读写操作。 一、串口通信基础 串口通信,也称为串行通信,是计算机硬件的一种通信方式,通过串行数据线进行单个比特位的传输。它...
### AVR串口C实例知识点详解 #### 一、引言 在嵌入式系统开发过程中,串行通信是非常重要的组成部分之一。本篇文章将基于提供的AVR串口C实例代码,详细解析单片机与计算机之间进行串口通信的硬件电路连接方式及...
通过实例化ApdComPort控件,设置相关属性,监听和响应事件,可以快速构建出可靠的串口通信程序。 总之,ApdComPort控件是Delphi开发串口通信程序的一个高效工具,通过理解和熟练运用其属性和事件,开发者可以轻松...
串口,也称为串行接口,通过串行数据传输方式将数据一位一位地发送和接收。常见的串口标准有RS-232、RS-485和USB转串口等。串口通信涉及的主要参数包括波特率(如9600、19200等)、数据位(通常为8位)、停止位(1或...
51单片机的串行接口遵循通用异步接收发送器(UART)标准,可以设置波特率、奇偶校验、停止位等参数以适应不同的通信需求。 在51单片机的串口通信中,主要涉及以下关键知识点: 1. **初始化设置**:首先,我们需要...