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方法,使用起来非常简单,只不过是针对具体的内容加以灵活运用而已,数据接受按照不同调制解调器的通讯协议接收并解析就可以了,有什么问题,大家可以跟贴讨论!
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
MMC整流器技术解析:基于Matlab的双闭环控制策略与环流抑制性能研究,Matlab下的MMC整流器技术文档:18个子模块,双闭环控制稳定直流电压,环流抑制与最近电平逼近调制,优化桥臂电流波形,高效并网运行。,MMC整流器(Matlab),技术文档 1.MMC工作在整流侧,子模块个数N=18,直流侧电压Udc=25.2kV,交流侧电压6.6kV 2.控制器采用双闭环控制,外环控制直流电压,采用PI调节器,电流内环采用PI+前馈解耦; 3.环流抑制采用PI控制,能够抑制环流二倍频分量; 4.采用最近电平逼近调制(NLM), 5.均压排序:电容电压排序采用冒泡排序,判断桥臂电流方向确定投入切除; 结果: 1.输出的直流电压能够稳定在25.2kV; 2.有功功率,无功功率稳态时波形稳定,有功功率为3.2MW,无功稳定在0Var; 3.网侧电压电流波形均为对称的三相电压和三相电流波形,网侧电流THD=1.47%<2%,符合并网要求; 4.环流抑制后桥臂电流的波形得到改善,桥臂电流THD由9.57%降至1.93%,环流波形也可以看到得到抑制; 5.电容电压能够稳定变化 ,工作点关键词:MMC
Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构,Simulink建模,MPPT最大功率点追踪,扰动观察法采用功率反馈方式,若ΔP>0,说明电压调整的方向正确,可以继续按原方向进行“干扰”;若ΔP<0,说明电压调整的方向错误,需要对“干扰”的方向进行改变。 ,Boost升压;光伏并网结构;Simulink建模;MPPT最大功率点追踪;扰动观察法;功率反馈;电压调整方向。,光伏并网结构中Boost升压MPPT控制策略的Simulink建模与功率反馈扰动观察法
STM32F103C8T6 USB寄存器开发详解(12)-键盘设备
科技活动人员数专指直接从事科技活动以及专门从事科技活动管理和为科技活动提供直接服务的人员数量
Matlab Simulink仿真探究Flyback反激式开关电源性能表现与优化策略,Matlab Simulink仿真探究Flyback反激式开关电源的工作机制,Matlab Simulimk仿真,Flyback反激式开关电源仿真 ,Matlab; Simulink仿真; Flyback反激式; 开关电源仿真,Matlab Simulink在Flyback反激式开关电源仿真中的应用
基于Comsol的埋地电缆电磁加热计算模型:深度解析温度场与电磁场分布学习资料与服务,COMSOL埋地电缆电磁加热计算模型:温度场与电磁场分布的解析与学习资源,comsol 埋地电缆电磁加热计算模型,可以得到埋地电缆温度场及电磁场分布,提供学习资料和服务, ,comsol;埋地电缆电磁加热计算模型;温度场分布;电磁场分布;学习资料;服务,Comsol埋地电缆电磁加热模型:温度场与电磁场分布学习资料及服务
1、文件内容:ibus-table-chinese-yong-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-yong-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
基于51单片机protues仿真的汽车智能灯光控制系统设计(仿真图、源代码) 一、设计项目 根据本次设计的要求,设计出一款基于51单片机的自动切换远近光灯的设计。 技术条件与说明: 1. 设计硬件部分,中央处理器采用了STC89C51RC单片机; 2. 使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进行转化成数字信号; 3. 显示部分采用了LCD1602液晶,还增加按键部分电路,可以选择手自动切换远近光灯; 4. 用超声模块进行检测距离;
altermanager的企业微信告警服务
MyAgent测试版本在线下载
Comsol技术:可调BIC应用的二氧化钒VO2材料探索,Comsol模拟二氧化钒VO2的可调BIC特性研究,Comsol二氧化钒VO2可调BIC。 ,Comsol; 二氧化钒VO2; 可调BIC,Comsol二氧化钒VO2材料:可调BIC技术的关键应用
C++学生成绩管理系统源码
基于Matlab与Cplex的激励型需求响应模式:负荷转移与电价响应的差异化目标函数解析,基于Matlab与CPLEX的激励型需求响应负荷转移策略探索,激励型需求响应 matlab +cplex 激励型需求响应采用激励型需求响应方式对负荷进行转移,和电价响应模式不同,具体的目标函数如下 ,激励型需求响应; matlab + cplex; 负荷转移; 目标函数。,Matlab与Cplex结合的激励型需求响应模型及其负荷转移策略
scratch介绍(scratch说明).zip
内容概要:本文全面介绍了深度学习模型的概念、工作机制和发展历程,详细探讨了神经网络的构建和训练过程,包括反向传播算法和梯度下降方法。文中还列举了深度学习在图像识别、自然语言处理、医疗和金融等多个领域的应用实例,并讨论了当前面临的挑战,如数据依赖、计算资源需求、可解释性和对抗攻击等问题。最后,文章展望了未来的发展趋势,如与量子计算和区块链的融合,以及在更多领域的应用前景。 适合人群:对该领域有兴趣的技术人员、研究人员和学者,尤其适合那些希望深入了解深度学习原理和技术细节的读者。 使用场景及目标:①理解深度学习模型的基本原理和结构;②了解深度学习模型的具体应用案例;③掌握应对当前技术挑战的方向。 阅读建议:文章内容详尽丰富,读者应在阅读过程中注意理解各个关键技术的概念和原理,尤其是神经网络的构成及训练过程。同时也建议对比不同模型的特点及其在具体应用中的表现。
该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。
这份长达104页的手册由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队精心编撰,内容详尽,覆盖了从基础概念、技术原理到实战案例的全方位指导。它不仅适合初学者快速了解DeepSeek的基本操作,也为有经验的用户提供了高级技巧和优化策略。
主题说明: 1、将mxtheme目录放置根目录 | 将mxpro目录放置template文件夹中 2、苹果cms后台-系统-网站参数配置-网站模板-选择mxpro 模板目录填写html 3、网站模板选择好之后一定要先访问前台,然后再进入后台设置 4、主题后台地址: MXTU MAX图图主题,/admin.php/admin/mxpro/mxproset admin.php改成你登录后台的xxx.php 5、首页幻灯片设置视频推荐9,自行后台设置 6、追剧周表在视频数据中,节目周期添加周一至周日自行添加,格式:一,二,三,四,五,六,日
运行GUI版本,可二开