单位领导要求设计一个简单的设备,用计算机串口或PS2口控制220V电源的开关,没做过硬件相关的东西,不知如何下手,请教大家,帮忙帮忙!
请先介绍大概的过程
1、使用什么硬件(什么芯片,或者模块)
2、是否需要特殊的软件,或是DELPHI本身就可以做出来
3、其它
谢谢先

解决方案 »

  1.   

    需要可编程的下位机,用PLC比较方便些,不过贵,单片机的话,你活就有得干了,做板比写程序花的时间会多很多
      

  2.   

    不难的!
    俺前年弄过一个那样的东西!
    传感器检测是否有东西通过!
    然后两个扫描头读取数据!
    数据有误的话!
    机械手把箱子拿走!
    ……
    买硬件的时候带的光盘里一般有Demo的!
    简单改改就行!
      

  3.   

    串口編程...
    1.條件:買一個40-~50元的继电器(支持5V电压之类);
    2.動手:串口中的DTR针脚可以输出你需要的电压,你焊两根线,一跟连接dtr(4号针脚),一跟连接地线(一般是五号针脚),然后你编程升高DTR的电位,就可以打开继电器(5V),降低就关闭;
    3.代碼說話:给你个例子,串口编程控制dtr和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. 
      

  4.   

    简单吧,买个5V的小继电器,然后把常开触点串在开关电源的开关里面串口可以输出5-8V电压,就OK了啊
      

  5.   

    5V的继电器驱动电流必须<20毫安,因为这个端口的输出电流<20毫安。否则驱动不了!另外可以加入一个晶体管放大电路就可以驱动。
      

  6.   

        要做一个电路板,板上大概得有以下零件:51单片机、晶震、几个电容、一个MAX232串口芯片、一个7805电源转换片(要看外部供电电源),一条232传输线,电烙铁、焊锡丝、一个光板(不行随便找个塑料板或木版)、keil C51单片机编程软件、DELPHI写个串口控制程序。    大概就这么多吧
      

  7.   

    到这里买一个现成的,往串口发指令就行了。
    http://item.taobao.com/item.htm?id=3410556137
      

  8.   

    这种一般厂家都有封装好的应用层API的,直接用就是了
    实在不行就直接发AT指令,但可能要多费点事
      

  9.   

    如果7楼说的:
    2.動手:串口中的DTR针脚可以输出你需要的电压,你焊两根线,一跟连接dtr(4号针脚),一跟连接地线(一般是五号针脚),然后你编程升高DTR的电位........能实现控制高低电平的变化,可以再使用一个光电耦合器(MOC3061),信号端接4脚与地,控制端控制一个双向可控硅(TLC336A),TLC336A的可控硅允许通过电流3A,耐压600V.如果需要控制更大的负载用电设备可以使用这个可控硅控制一个可以带大负载的继电器即可.以前使用并口编程,外接这样的电路控制过用电器.MOC3061信号端记得加一个限流电阻.
      

  10.   

    這個根本不需要和單片機或PLC通訊(這個有點牛刀了),直接連接OK後發指令即可認真檢查一下代碼,再檢查接線是否正確;再確定一點就是不會燒壞串口;因為公司機房的煙感器程序控制設備就是使用的Delphi控制的繼電器,使用近三個月了,一切正常上面的代碼註釋說明的非常清楚了,多用點心研究一下,或者在某個環節中出現的問題
      

  11.   

    http://www.cdle.net/web/alldata/CDLE/cdle050025.htmDELPHI中控制一个继电器
      

  12.   

    以前公司做项目用过pci的板卡,好像是研祥还是研华的,忘记了就是输出IO信号的