delphi 串口控制继电器  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 串口控制继电器


串口编程...
1.条件:买一个40-~50元的继电器(支持5V电压之类);
2.动手:串口中的DTR针脚可以输出你需要的电压,你焊两根线,一跟连接诶tr(4号针脚),一跟连接地线(一般是五号针脚),然后你编程升高DTR的电位,就可以打开继电器(5V),降低就关闭;
3.代码说话:

给你个例子,串口编程控制诶tr和rts针脚电压,rts也可以输出一个5-8V的电压 

unit   Unit1; 

interface 

uses 
    Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs, 
    StdCtrls,   ExtCtrls; 

type 
    TForm1   =   class(TForm) 
        rdCOM:   TRadioGroup; 
        Label1:   TLabel; 
        Label2:   TLabel; 
        btnOpenPort:   TButton; 
        btnEnd:   TButton; 
        spDTR:   TShape; 
        spRTS:   TShape; 
        btnDTR:   TButton; 
        btnRTS:   TButton; 
        procedure   btnOpenPortClick(Sender:   TObject); 
        procedure   btnEndClick(Sender:   TObject); 
        procedure   btnDTRClick(Sender:   TObject); 
        procedure   btnRTSClick(Sender:   TObject); 
        procedure   FormCreate(Sender:   TObject); 
    private 
        {   Private   declarations   } 
        DTRState:Boolean; 
        RTSState:Boolean; 
        DOValue:DWORD; 
    public 
        {   Public   declarations   } 
        procedure   OpenComm;     //打开通信端口 
    end; 

var 
    Form1:   TForm1; 
    hComm:   THandle; 

implementation 

{$R   *.DFM} 

//以下是打开通信端口的程序 
procedure   TForm1.btnOpenPortClick(Sender:   TObject); 

begin 
//若通信端口已打开,则不需要再打开 
    if   (hComm <> 0)   then   begin 
        Messagedlg( '通信端口已打开,不需再开 ',mtError,[mbOK],0); 
        exit; 
    end; 
    OpenComm;   //打开通信端口的子程序 
    //先将DTR/RTS的电压降成低电压 
    EscapeCommFunction(   hComm,   CLRDTR);   //将DTR降为低电压 
    EscapeCommFunction(   hComm,   CLRRTS);   //将RTS降为低电压 
end; 

//以下是打开通信端口的实际程序代码,采用API 
procedure   TForm1.OpenComm; 
var 
    cc:TCOMMCONFIG;   //定义通信组态变量 
    Temp:string; 
begin 
    //   选择所要打开的COM 
    Temp:= 'COM '+inttostr(rdcom.ItemIndex+1); 
    //   以Create函数打开COM 
    hComm:=CreateFile(PChar(Temp),   GENERIC_READ   or   GENERIC_WRITE, 
              0,   nil,   OPEN_EXISTING,   0,   0); 
    //   判断COM   是否顺利打开 
    if   (hComm   =   INVALID_HANDLE_VALUE)   then   begin 
        Messagedlg( '打开通信端口错误!! ',mtError,[mbOK],0); 
        exit; 
    end; 
    //以下设置通信端口的参数 
    GetCommState(hComm,cc.dcb);         //   得知目前COM   的状态 
    cc.dcb.BaudRate:=CBR_9600;           //   设置波特率为9600 
    cc.dcb.ByteSize:=8;                         //   字节为   8   bit 
    cc.dcb.Parity:=NOPARITY;               //   Parity   为   None 
    cc.dcb.StopBits:=ONESTOPBIT;       //   1   个Stop   bit 
    //若分别控制DTR、RTS,必须不能激活HandShaking 
    cc.dcb.Flags:=1;     //此动作可关闭HandShaking等设置 
    //以下将通信端口参数写入实际硬件 
    if   not   SetCommState(hComm,   cc.dcb)   then   begin   //   设置COM   的状态 
        MessageBox   (0,   '通信端口设置错误!!! ', ' ',MB_OK); 
        CloseHandle(hComm); 
        exit; 
    end; 
end; 

//以下是结束按钮的动作 
procedure   TForm1.btnEndClick(Sender:   TObject); 
begin 
      CloseHandle(hComm);         //关闭通信端口 
      close;                                   //结束程序 
end; 


//以下是控制DTR状态的按钮程序 
procedure   TForm1.btnDTRClick(Sender:   TObject); 
begin 
        //若通信端口未打开,则不作动作,并跳出 
        if   (hComm=0)   then   begin 
              Messagedlg( '通信端口未打开!! ',mtError,[mbOK],0); 
              exit; 
        end; 
        //判断DTRState值,输出状态后,将原值作转态 
        if   DTRState   then 
            begin 
              DOValue:=CLRDTR;   //设置DTR为低电压 
              EscapeCommFunction(   hComm,   DOValue   );//输出DTR状态 
              spDTR.Brush.Color:=clWhite;   //变更灯号的颜色 
            end 
        else 
            begin 
              DOValue:=SETDTR;   //设置DTR为高电压 
              EscapeCommFunction(   hComm,   DOValue   );//输出DTR的状态 
              spDTR.Brush.Color:=clRed;   //变更灯号的颜色 
            end; 
        DTRState:=(not   DTRState);   //将DTRState转态 
end; 

//以下是控制RTS状态的按钮程序 
procedure   TForm1.btnRTSClick(Sender:   TObject); 
begin 
        //若通信端口未打开,则不作动作,并跳出 
        if   (hComm=0)   then   begin 
              Messagedlg( '通信端口未打开!! ',mtError,[mbOK],0); 
              exit; 
        end; 
        //判断RTSState值,输出状态后,将原值作转态 
        if   RTSState   then 
            begin 
              DOValue:=CLRRTS;   //设置RTS为低电压 
              EscapeCommFunction(   hComm,   DOValue   );//输出RTS状态 
              spRTS.Brush.Color:=$FFFFFF;//变更灯号 
            end 
        else 
            begin 
              DOValue:=SETRTS;   //设置RTS为高电压 
              EscapeCommFunction(   hComm,   DOValue   );//输出RTS状态 
              spRTS.Brush.Color:=$00FF00;//变更灯号 
            end; 
        RTSState:=(not   RTSState);   //将RTSState转态 
end; 

//窗体建立时的初值设置 
procedure   TForm1.FormCreate(Sender:   TObject); 
begin 
    RTSState:=False;   //默认是低电压 
    DTRState:=False;   //默认是低电压 
end; 
end. 
 
 

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.041445970535278 seconds