Delphi MSComm简单的中间PC串口数据中转


本文整理自网络,侵删。

 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
 
type
  TForm1 = class(TForm)
    MSComm1: TMSComm;
    MSComm2: TMSComm;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure MSComm1Comm(Sender: TObject);
    procedure MSComm2Comm(Sender: TObject);
  private
    {
 Private declarations 
}
  public
    {
 Public declarations 
}
  end;
 
var
  Form1: TForm1;
 
implementation
 
{
$R *.dfm
}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  button1.Enabled:=true;
  if mscomm1.PortOpen then
    mscomm1.PortOpen:=false;
  if mscomm2.PortOpen then
    mscomm2.PortOpen:=false;
  Button2.Enabled:=false;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Application.MessageBox('您真的想退出吗?','串口数据处理',mb_okcancel)=idok then
  begin
    if mscomm1.PortOpen then
      mscomm1.PortOpen:=false;
    if mscomm2.PortOpen then
      mscomm2.PortOpen:=false;
  end
  else
    action:=canone;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  button1.Enabled:=false;
  Button2.Enabled:=true;
  //COM1
  MSComm1.CommPort:=1; //默认串口1
  MSComm1.InBufferSize:=1024;
  MSComm1.OutBufferSize:=512;
  MSComm1.Settings:='19200,n,8,1'; //波特率为19200
  if not MSComm1.PortOpen then
    MSComm1.PortOpen:=true; //打开串口
  MSComm1.InBufferCount:=0;               //滑空接收缓冲区
  MSComm1.OutBufferCount:= 0;             //清空发送缓冲区
  MSComm1.RThreshold:=1;
  MSComm1.InputLen:=0;
 
  //COM2
  MSComm2.CommPort:=2; //默认串口2
  MSComm2.InBufferSize:=1024;
  MSComm2.OutBufferSize:=512;
  MSComm2.Settings:='19200,n,8,1'; //波特率为19200
  if not MSComm2.PortOpen then
    MSComm2.PortOpen:=true; //打开串口
  MSComm2.InBufferCount:=0;               //滑空接收缓冲区
  MSComm2.OutBufferCount:= 0;             //清空发送缓冲区
  MSComm2.RThreshold:=1;
  MSComm2.InputLen:=0;
   
}
  //发送字符数据时注意必须用回车符结束
 
end;
 
procedure TForm1.MSComm1Comm(Sender: TObject);
var
  Buffer:string;
begin
  Case MSComm1.CommEvent of
  2:        //comEvReceive 2 接收事件
    begin
      Buffer := MSComm1.Input;
      MSComm2.Output:=Buffer;
      Buffer:='';
    end
  end;
 
end;
 
procedure TForm1.MSComm2Comm(Sender: TObject);
var
  Buffer:string;
begin
  Case MSComm2.CommEvent of
  2:        //comEvReceive 2 接收事件
    begin
      Buffer := MSComm2.Input;
      MSComm1.Output:=Buffer;
      Buffer:='';
    end
  end;
end;
 
end.

相关阅读 >>

Delphi 之 tpagecontrol组件

Delphi 让窗口一直置顶,并且焦点也不移出

Delphi设置屏幕分辨率的函数

Delphi获取控件界面图像“新招”

Delphi 10 seattle android应用程序使用toast

Delphi通过loadlibrary调用其他动态库

Delphi将n个相同字符提取到左边,m个相同字符提取到右边

Delphi 查找目录下文件(多文件查找)

Delphi cookie获取及使用

Delphi 全局钩子锁定键盘

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...