delphi 2010 串口的创建和使用
来源:互联网 发布:淘宝网店没人 编辑:程序博客网 时间:2024/06/05 06:49
初始化串口
var
dcb: TDCB;
Error: Boolean;
CommName : string;
shSend:THandle;
begin
CommName := Port ;
shSend := CreateFile(PChar(CommName),GENERIC_WRITE, 0,
nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if shSend = INVALID_HANDLE_VALUE then
raise Exception.Create('Open '+CommName+' port error!');
Error := SetCommMask(shSend,EV_RXCHAR);
if (not Error) then
raise Exception.Create('SetCommMask error');
SetupComm(shSend, 1024, 1024);
GetCommState(shSend, dcb);
dcb.BaudRate := BaudRate;
dcb.ByteSize := 8;
dcb.StopBits := ONESTOPBIT ;
dcb.Parity := NOPARITY ;
Error := SetCommState(shSend, dcb);
if (not Error) then
raise Exception.Create('Set '+CommName+' error');
InitialCom:= shSend;
end;
发送数据
procedure SendDatatoCom(sdata: string; shSend: THandle);
var
dwNumberOfBytesWritten, dwNumberOfBytesToWrite,
ErrorFlag, dwWhereToStartWriting: DWORD;
pDataToWrite: AnsiString;
write_os: Toverlapped;
begin
if shSend<=0 then Exit;
dwWhereToStartWriting := 0;
dwNumberOfBytesWritten := 0;
dwNumberOfBytesToWrite := Length(sdata);
if (dwNumberOfBytesToWrite = 0) then Exit;
pDataToWrite := AnsiString(sdata);
FillChar(Write_Os, SizeOf(write_os), 'a');
Write_Os.hEvent := CreateEvent(nil, True, False, nil);
SetCommMask(shSend, EV_TXEMPTY);
repeat
if not WriteFile(shSend, pDataToWrite[dwWhereToStartWriting+1],
dwNumberOfBytesToWrite, dwNumberOfBytesWritten,
@write_os) then
begin
ErrorFlag := GetLastError;
if ErrorFlag <> 0 then
begin
if ErrorFlag = ERROR_IO_PENDING then
begin
WaitForSingleObject(Write_Os.hEvent, INFINITE);
GetOverlappedResult(shSend, Write_os,
dwNumberOfBytesWritten, False);
end
else
exit;
//raise Exception.Create('Send data failed!');
end;
end;
Dec(dwNumberOfBytesToWrite, dwNumberOfBytesWritten);
Inc(dwWhereToStartWriting, dwNumberOfBytesWritten);
until (dwNumberOfBytesToWrite <= 0);
end;
监听端口线程
procedure Tcom_Commaction.Execute;
var
dwEvtMask:Dword;
Wait:Boolean;
//OverLap: TOverlapped;
//lpErrors:Dword;
//Coms1:Tcomstat;
Begin
fillchar(lpcom_Commaction,sizeof(toverlapped),0);
//OverLap.hEvent := com_Commaction_event;
While true do // (not Terminated)
Begin
dwEvtMask:=0;
try
Wait:=WaitCommEvent(FrmCommaction.hcom_Commaction,dwevtmask,lpcom_Commaction);//@OverLap);//lpcom_Commaction);
except
{if Clearcommerror(FrmCommaction.hcom_Commaction,lpErrors, @Coms1) then
begin
end; }
end;
if Wait Then
Begin
waitforsingleobject(com_Commaction_event,infinite);
resetevent(com_Commaction_event);
PostMessage(FrmCommaction.Handle,Wm_com_Commaction,0,0);
end;
end;
end;
- delphi 2010 串口的创建和使用
- Delphi中DLL的创建和使用
- Delphi中DLL的创建和使用
- Delphi中DLL的创建和使用
- 使用ACTIVEX和DELPHI开发串口通讯
- 使用ACTIVEX和DELPHI开发串口通讯
- delphi动态创建的TMSComm串口控件不起作用!
- delphi中创建和使用dll
- Delphi Dll 创建和使用(2)
- Delphi里使用SPComm串口控件的一个乌龙BUG
- 串口的初始化和使用
- Delphi 2010 串口控件TComPort(可替代使用SPComm2010)
- Delphi中资源文件的创建与使用
- Delphi下dll的创建与使用
- delphi 窗体的创建和释放
- Delphi 窗体的创建 和 释放
- delphi 窗体的创建和释放
- delphi 窗体的创建和释放
- Orchard(四):创建Module --Hello World
- 理解红黑树
- 接受一个iCal邀请, ExtractOrganizedMeetings值
- sql中级命令
- SQL SERVER 2008函数大全(含例子)之01
- delphi 2010 串口的创建和使用
- 代码之美 正则表达式匹配器
- LINUX下的ssh认证,不用密码登陆另一台机器
- make makefile GCC/CC
- 我的互联网信仰
- Zend Guard - 5.5.0 / ZendOptimizer解密技巧漫谈
- MySQL 学习笔记 一
- 图形加速卡技术 [专业的基础技术文章]
- 软件开发人员助手 好工具分享