串口通讯delphi类,支持多机通讯 点击:1089 | 回复:3



周军峰

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2002年9月29日
发表于:2004-07-10 09:46:00
楼主
刚才本打算把源代码贴上,结果失败!以下是声明部分: unit Unit_zfcomm; interface uses Windows,SysUtils,Controls,Forms,Dialogs; const missecond=0.0000000115972; //将时间延迟更改为毫秒单位 type TCommObj = class(TObject) private hcom:Thandle; lpol:Poverlapped; read_Buffer:array[0..9] of char; //读缓冲区,应(可)该为局部变量 write_Buffer:array[0..99] of char; //写缓冲区,必要时可增大 //数组下标必须为 0 sa :SECURITY_ATTRIBUTES; procedure Init; //初始化参数,被构造函数调用 function CommInitialize():bool; //被openPort调用 function ReadBuffer():integer; //被readDev调用 function WriteBuffer():integer; //被readDev调用 procedure ClearBuffer(var arr:array of char); procedure SetWriteBuffer(value:string); //不被类外的任何代码调用 protected //目的是可以被子类直接使用 //读写属性 comm_commport:pchar; //com1 com2 com3 ... comm_settings:string; //9600,n,8,1 comm_portopen:bool; //端口的开关状态 comm_timewait:real; //单位是毫秒 comm_evtchar:char; //结束字符 comm_inbsize:cardinal; //输入缓冲 comm_outbsize:cardinal; //输出缓冲 comm_charorlen:integer; //结束验证类型 0:特定char ,否则为接受字符的长度 comm_charmodel:integer; //显示模式0:char,1:hex,2:asc public //字段的声明 //可读写都声明为字段 property CommPort:pchar read comm_commport write comm_commport; property Settings:string read comm_settings write comm_settings; property inBsize:cardinal read comm_inbsize write comm_inbsize; property outBsize:cardinal read comm_outbsize write comm_outbsize; property TimeWait:real read comm_TimeWait write comm_timeWait; property evtChar:char read comm_evtChar write comm_evtChar; property charOrLen:integer read comm_charorlen write comm_charorlen; property charModel:integer read comm_charmodel write comm_charmodel; property portOpen:bool read comm_portOpen; function SetPortOpen(value:boolean):boolean; function SendAByte(abyte:byte):integer; //发送一个字节 ******* function SendMByte(str_data:string):integer; //发送多个字节 ******* function GetData(command:string):string; //应用在普通通讯 function ResetCommPara(seting : string):bool; //设置通讯口属性 function GetDataFromAddr(addr:byte;command:string):string; //应用在多机通讯 constructor Create; //构造函数 负责初始化数据 destructor Destroy; override; //析构函数 负责清除对象和关闭端口 //和通讯有关的其他常用函数 end; {声明TcommObj 类 完毕} {全局函数声明处} function fcs(str:string):string; function asctochar(str:string):string; //10进制字符串变成字符串 function asctohex(str:string):string; //10进制字符串变成16进制字符串 function chartoasc(str:string):string; //字符串变成10进制字符串 function chartohex(str:string):string; //字符串变成16进制字符串 function hextochar(str:string):string; //16进制字符串变成字符串 function hextoasc(str:string):string; //16进制字符串变成10进制字符串 function FmtStr(str:string;s_len:integer):string; function FmtStrEx(str:string;s_len:integer;SpaceLeft:bool;delLeft:bool):string; function getPosStr(substr:string;str:string;order:integer):integer; // function WinExitInNT( iFlags : integer ) : boolean; implementation {以下是TcommObj 的实现文件 }



周军峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2002年9月29日
发表于:2004-07-10 09:53:00
1楼
以下是实现部分1:

周军峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2002年9月29日
发表于:2004-07-10 09:55:00
2楼
function Tcommobj.SetPortOpen(value:boolean):boolean; //开关端口 begin if value then begin if not comm_portopen then comm_portopen:=comminitialize();end else begin if closehandle(hcom) then comm_portopen:=false;end; result:=comm_portopen; end; function Tcommobj.SendAByte(abyte:byte):integer; begin if not comm_portopen then begin result:=0;exit;end; setwritebuffer(chr(abyte)); result:=writeBuffer(); end; function Tcommobj.SendMByte(str_data:string):integer; begin if not comm_portopen then begin result:=0;exit;end; setwritebuffer(str_data); result:=writeBuffer(); end;

周军峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2002年9月29日
发表于:2004-07-10 10:01:00
3楼
对不起,传不上去了! 该类的实现全部使用api函数,并且支持多机通讯! 如果需要,zjf770310@sohu.com

热门招聘
相关主题

官方公众号

智造工程师