:大送血!!串口通讯,关于SPCOMM的最简单的问题(100分) (250分)

W

wily

Unregistered / Unconfirmed
GUEST, unregistred user!

procedure TForm1.BitBtn1Click(Sender: TObject);
var
Sendbuffer : array[0..10] of Byte ;
begin
Comm.RtsControl := RTSEnable;//***
Sleep(100);//***
SendBuffer[0]:=$01;
SendBuffer[1]:=$0b;
SendBuffer[2]:=$80;
Comm1.WriteCommData(pchar(@SendBuffer), 3);
Sleep(100);//***
Comm.RtsControl := RTSDisable;//***
end;

我以COM1作为发送端,COM2作为接收端,通过两个RS485转换接口进行连接。

但是COM1发出的数据COM2却接收不到,为什么?以上程序有什么错误吗?

去掉有//***标注的语句也不行。

接收数据并没有问题,我已经通过其他方法测试了COM2的接收功能。

我只有280分,现在奉上250分,望各位高手不吝赐教,万谢!!!

如有答案请尽量详述。




 
先告诉我您跳线了没有,就是收发互换,信号线互换,3线连接或5线的0 moden
 
你可以使用超级终端来收取你的数据,
用来判别是不是你发送端的程序有问题:)

还有像g622说的,你的硬件接线是否正确?
 
接收部分程序呢?

Comm.RtsControl := RTSEnable;//***
^^^^^^^
Sleep(100);//***
SendBuffer[0]:=$01;
SendBuffer[1]:=$0b;
SendBuffer[2]:=$80;
Comm1.WriteCommData(pchar(@SendBuffer), 3);
^^^^^^
Sleep(100);//***
Comm.RtsControl := RTSDisable;//***

COMM 和COMM1?
 
我所用的是232-485的转换接头,将发送端(COM1)的T+接至接收端(COM2)的R+,
发送端的T-接至接收端的R-,跳线的方法是发送端设为DTE,接收端设为DCE(说明书如
是说)。我想跳线应该没有问题,因为跳错了,接受端就收不到数据,我试过。
至于接收程序我想应该没有问题,因为我用另一个可以发送485协议的设备发送数据,
接收端(COM2)收到的数据和预期的数据一致。
现在有一个问题,我的设备的衔接方法是,将我所说的可以发送485协议的设备的输
出端D+与发送端(COM1)的T+,接收端的R+连接到一起,D-与T-、R-连接到一起。设备所
发送的载波信号会否覆盖发送端的数据信号?有这种可能吗?

谢谢各位!
 
另外我程序中是这样处理的,放两个SPCOMM控件,一个负责COM1的发送,另一个负责
COM2的接收,如此可否?
 
放两个控件?不行的.
另外,你用的好像是422不是485吧
 
放两个控件可以的,保正硬件联接OK的前提下:
1,你接收部分程序呢?
2。Comm.RtsControl := RTSEnable--》为何搞如此复杂?
3,com1,com2参数都相同吗?波特率'字长'校验位等?
4。Comm.startcomm;//将comm打开了没有?
5.Sleep(100)--->用不着睡觉! :)
 
我刚做完一个串口通讯的活(从rs232上读数据)。
1。做一个串口通讯线(半双工 2->3 ,3接二极管后接->2,5接地(可选),另一方同理。)
一个接com1,一接com2。
2。下载一串口精灵。http://duanry.yeah.net.
或我给您mail一个。它可随意收,发2,16,ascii
3.两边的参数设成一致(9600,8,n,1),如接收慢,调readintervaltimeout=50。先接再发。
4。先用精灵发,你的空件收,success 后,再空件发,精灵收.
5.干吗不在你的程序中放两个edit,一个检查com1 的buffer,一个检查comm2 的buffer.
edit1.text:=strpas(pchar(buffer));
6.一言难尽,如有question ,mail me yuexiao@xju.edu.cn
 
我在SPCOMM上也遇难题。两台计算机之间用232通讯没问题(win98).
1 后来在232-485时,在<font color=blue>NT</font>下两台计算机收发正常,但RTScontrol必须为RTSmissionavaiable;
设别的不行。
2 同样的设置在<font color=blue>win98</font>下,就不管用了。
请大侠帮忙!
 
to:wily 我不太明白你为何要那么复杂
Sendbuffer : array[0..10] of Byte ;
begin
Comm.RtsControl := RTSEnable;//***
Sleep(100);//***
SendBuffer[0]:=$01;
SendBuffer[1]:=$0b;
SendBuffer[2]:=$80;
Comm1.WriteCommData(pchar(@SendBuffer), 3);
直接用
<font color=blue>comm1.WriteCommData(pchar(edit1.text),length(edit1.text);</font>
不是更简单?!



 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
586
import
I
I
回复
0
查看
642
import
I
顶部