大家好!
谁用 MSCOMM 和 Delphi 开发过串口通讯程序,只用来接受和发送十六进制数据的一个简单的小程序.????????????????????
谁用 MSCOMM 和 Delphi 开发过串口通讯程序,只用来接受和发送十六进制数据的一个简单的小程序.????????????????????
解决方案 »
- webbrowser占用大量内存以及无法将程序隐藏的疑问求解
- 对您可能是个很简单的问题!数据库清空问题
- DELPHI 2005出更新包了,快下啊!!!
- 函数如何返回数组指针。
- 高手们帮我看一下下面这段代码怎么执行不起来! (VC的代码,借一下D版的人气啊)
- 这是什么ADOQuery??????
- 怎样控制TrichEdit的光标,使之在不同的行移动
- 怎样获取其他程序DrawGrid中的内容?
- 一个三层系统的问题,十万火急,关系到饭碗,请各位大虾赐教!
- DCOM连接的MIDAS能不能实现一些socket的通信功能啊?
- 大家推介几个人气旺的Delphi论坛,国内的
- Menu中新加入的菜单为什么提示连接错误(点后面没有弹出属性了,但是老的菜单项是可以的),不知道怎么解决??
有没有开发过在Delphi 中利用MSComm控件通讯的问题???? 代码如下:
var
Form1: TForm1;
senddata:array[1..10] of char;
reData:array of oleVariant;
sendstr:string;
restr:string;
i,j:longint;
w :integer ;implementation{$R *.dfm}
procedure tform1.sendhex(s:string);
var
s2,s3:string ;
bufl:array[0..50000] of byte;
i:integer;
begin
s2 := '';
s3 := '';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9')) or ((copy(s,i,1)>='a') and (copy(s,i,1)<='f')) or ((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2 := s2 +copy(s,i,1);
end;
end ;
for i:= 0 to (length(s2) div 2-1) do
begin
bufl[i]:=strtoint('$'+copy(s2,i*2+1,2));
s3 := s3 +char(bufl[i]);
end ;
mscomm1.Output := s3 ;
end ;procedure TForm1.FormCreate(Sender: TObject);
begin
sendstr:='';
w:= 0 ;
mscomm1.CommPort := 1; //指定端口
mscomm1.Settings := '9600,N,8,1'; //其它参数
mscomm1.InBufferSize := 1024; //接收缓冲区
mscomm1.OutBufferSize := 1024; //发送缓冲区
mscomm1.InputMode := comInputModeBinary; //接收模式
mscomm1.InputLen := 0; //一次读取所有数据
mscomm1.SThreshold := 0; //一次发送所有数据
mscomm1.InBufferCount := 0; //清空读取缓冲区
mscomm1.OutBufferCount := 0; //清空发送缓冲区
MSComm1.RThreshold := 1; //设置接收多少字节开产生oncomm事件
mscomm1.PortOpen:=true; //打开端口end;procedure TForm1.Button2Click(Sender: TObject);
begin
sendhex('8800');
end;
我的问题是:为什么发8800时,只能发出去00呢?????????????????????????????????????????????
发5500时却都能发出去!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!我的是十六进制接发送数据的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!请高手指点或给个列子
//----$88是什么字符?ASCII字符最大也只能有$7F啊.
//----$55是在ASCII表示范围内的.当然可以发送了.
你不如直接用字节数组发送就可以了.
var
s2,s3:string ;
v:variant;
bufl:array[0..50000] of byte;
i:integer;
begin
s2 := '';
s3 := '';
for i:=1 to length(s) do
begin
if (s[i] in ['0'..'9','a'..'f','A'..'F']) then
//---判断一个字符可以用上面的方式
begin
s2 := s2 +s[i];
end;
end ;
i:=length(s2) div 2+1;
v:=VarArrayCreate([0,i],varByte);
for i:= 0 to (length(s2) div 2-1) do
begin
v[i]:=strtoint('$'+copy(s2,i*2+1,2));
end ;
mscomm1.Output := V ;
end ;
if length(s2) mod 2=0 then
i:=length(s2) div 2
else
i:=length(s2) div 2+1;
v:=VarArrayCreate([0,i],varByte);
......