高分求源码。谁有串口通信的源码。300分!! (300分)

  • 主题发起人 主题发起人 东方龙
  • 开始时间 开始时间

东方龙

Unregistered / Unconfirmed
GUEST, unregistred user!
我要串口通信的源码,要求能接收和发送十六进制数据(重要),//wxlzyb@16
也可以CPORT或MSCOMM控件的源码但必须全部可以接收和发送十六进制数据的,
如果能写出CPORT怎样接收十六进制数据的朋友150分,提供源码证实能用的300分,
快。EMAIL:e18@163.com
QQ:80215521
 
我有VB的 你要吗??
 
自己去看看VB自带的帮助文档不就行了吗?
 
VB我也有MSCOMM的,但不懂呀,,,有没有DELPHI的。
 
到WWW.51DELPHI.COM下载工业控制控件,非常简单,且提供源代码.
 
我现在用CPORT可以发送十六进制,但不会收十六进制,,,,
 
转帖,希望有用

SPCOMM RS-232多线程控件例子:现时DELPHI上有很多串行口控件,SPCOMM控件有Data Bits、Parity、 Stop Bits 等配置,支持 Read/Write 时序控制 (Timing control)、 ReadIntervalTimeout、 WriteIntervalTimout 等 ,支持 DTR/DSR, RTS/CTS 硬件流程控置及 Xon/Xoff 软件流程控置,是目前比较完善的控件。 以下是一个用RS-232进行数据接收、显示的例子。必须将RS232的通信参数设置好才能正确接收数据。(Data Bits,Parity,Stop Bits,COM口参数)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm;
type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Comm1.startcomm;//创建窗体时,将comm1控件打开。
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;//关闭窗体时,将comm1控件关闭。
end;
end.

 
接收事件:
procedure TfmCommServer.MSCommComm(Sender: TObject);
var
TemStr,InStr:String;
i:Integer;
InTempS:OleVariant;
LenInBuf:Integer;
begin
ActiveComm:=Sender as TMSComm;
//with CommStakeOuter[ActiveComm.Tag] do State:=True;
ActiveStipulation:=GetStipulation(ActiveComm);
InTempS:=ActiveComm.Input;
if VarIsArray(InTempS) then
begin
LenInBuf:=VarArrayHighBound(InTempS,1)+1;
TemStr:='';
for i:=1 to LenInBuf do TemStr:=TemStr+Chr(Byte(InTempS[i-1]));
InStr:=TemStr;
end
else InStr:=InTempS;
if ActiveStipulation <> nil then ActiveStipulation.GetCommData(InStr);

if CurrentComm = ActiveComm then
begin
if not MonitorPaused and cbCodeWatch.Checked then
begin
CommWatcher.GetData(InStr);
CommWatcher.Resume;
end;
end;

if CurrentStipulation = ActiveStipulation then
begin
CurrentStipulation:=ActiveStipulation;
if cbCodeWatch.Checked then FrameWatcher.Resume;
end;

if DataDispatcher.Suspended then DataDispatcher.Resume;
end;
发送:
procedure TCDTStipulation.BroadCast;
//-----广播命令
//入口: 无
//出口:向下发21命令
var
Control_Word,Send_String:string;
begin
Control_Word:=Chr($21)+Chr($9E)+Chr($0)+Chr(StationID)+Chr($FF);
Control_Word:=Control_Word+Chr(GetCheckCRC(Control_Word));

Send_String:=CDTSynword+Control_Word;
if (Comm = nil) or not(Comm.PortOpen) then Exit;
Comm.OutPut:=StrToVarByteArray(Send_String);
end;
设置部分:
procedure TfmCommServer.UpdateCommSettings;
var
CurKey:TRegistry;
i:Integer;
ItemStr:String;
begin
CurKey:=TRegistry.Create;
CurKey.OpenKey(Comm_Key,True);
comboCommPort.Clear;
for i:= 0 to CommCount-1 do
with CurKey,Comms do
begin
InPutMode:=comInputModeBinary;
Settings:='300,n,8,1';
OnComm:=MSCommComm;
if ValueExists('COM'+IntToStr(CommPort)) then
Settings:=ReadString('COM'+IntToStr(CommPort))
else
WriteString('COM'+IntToStr(CommPort),Settings);
ItemStr:='COM'+IntToStr(Comms.CommPort);
comboCommPort.Items.Add(ItemStr);
try
PortOpen:=True;
except
// ShowMessage('通讯端口已打开或不存在!请核查后再重新打开。');
end;
end;

comboCommPort.ItemIndex:=0;
comboCommPortChange(Self);
end;


 
接收到的是十六进制码吗?但SPCOMM发送十六进制码代码你有没有?
 
感谢CWMDELPHER,
不知那位朋友有CPORT的,我刚会用CPORT。唉。。。
 
等待高手解决,对CWMDELPHER给100分
 
十六进制数据
字符串就不是十六进制数据吗?
只是你不会读
 
我有一个程序,有原代码,一看就回用。如要请联系我 Email:gzyhl@yeah.net
 
hfghfghfg, 请赐教。
 
各位老大,我现在只需要CPORT如何将接收到的数据转为十六进制显示,急呀,,
,那位好心人快帮帮忙呀
 
自己写一个转换程序不就行了
 
各位大侠,我现在还没有搞定呀,,那位朋友有CPORT接收十六进制的源码请发给我一份,
 
接收到的是二进制的数据,你的意思无非是转化成十六进制字符串来显示
发送的时候,需要将用户输入的十六进制字符串转化为二进制数据发送
 
去www.codestudy.net看看,
那里原代码不少。
 
不是,,我的意思是:我用CPORT可以直接发送十六进制数据,但接收到的是ASCII码,
我要把接收到的转为十六进制要怎么做?比如说收到了一个F,但十六进制的应该显示为16
 
后退
顶部