LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1505|回复: 12

为什么我的程序收不到串口来的数据啊!

[复制链接]
发表于 2004-11-3 15:42:24 | 显示全部楼层 |阅读模式
最近要写一个与智能仪器通信的程序,智能仪器连串口,发特定的字符串到串口,将从串口返回一定的字符串!在WIN下,只要设好波特率9600,数据位7,停止位1,偶校验就可以马上通信,直接SEND后,不停的READ就能读到返回的数据.可在LINUX下,我将经典的代码改了下,如果是两台计算机串口直连,这个程序可以成功收发数据!但连上仪器就是收不到数据,请大侠们指点下吧!
c_cc[VTIME] = 0
c_cc[VMIN] = 5这两个参数我也试了,都没有用!我的代码如下!
打开串口的代码:
var
  ios:  termios;
  aa: integer;
begin
  fd:= LibC.Open (port,fmOpenReadWrite or o_nonblock);
  tcgetattr (fd,ios);
  cfmakeraw (ios);
  cfsetospeed (ios, b9600);
  cfsetispeed (ios,b9600);
  ios.c_cflag := ios.c_cflag and (not PARENB);
  ios.c_cflag := ios.c_cflag or (not PARODD);
  ios.c_cflag := ios.c_cflag and (not CSTOPB);
  ios.c_cflag := ios.c_cflag and (not CSIZE);
  ios.c_cflag := ios.c_cflag or (not CS7);
  ios.c_lflag  := ios.c_lflag and (not (ICANON or ECHO or ECHOE or ISIG));
  ios.c_oflag  :=ios.c_oflag and ( not OPOST);
  ios.c_oflag := 0 ;
  ios.c_lflag:=0;
  tcflush(fd, TCIFLUSH);
  tcsetattr (fd,tcsanow,ios);
end
写串口的代码:
var
  d:string;
  resultat: integer;
begin
  d:= memo1.Text;
  resultat:= FileWrite (fd, d[1], Length(d));
  WriteLabel.Caption:= IntToStr (resultat)
end;
读串口的代码:
var   
  a:array [1..4096] of char;
  s:string;
  zaehler, index: integer;
begin
  s:= '';
  zaehler:= FileRead (fd, a, sizeof (a));
  ReadLabel.Caption:= IntToStr (zaehler);
    if zaehler > 0
    then begin
           for index:= 1 to zaehler do
             s:= s + a [index];
           memo2.Text:= s
         end
end;
期盼大侠回复!
wujunan@hotmail.com
 楼主| 发表于 2004-11-3 15:43:11 | 显示全部楼层
数据线是好的,因为在WINDOWS下与该仪器通讯的程序已经写出来并通过验证.在LINUX下,这个程序用来实验安装LINUX的两台PC,用串口线直连的,没有问题,A机一发送,B机马上可以收到!用来实验本机从COM1到COM2或反过来的数据发送接受也问题.可这段代码就是没法在我这个仪器上用,现象是串口可以成功打开,可以发送数据,但就是收不到返回的数据!我想问题可能在打开串口设置属性的代码上,是不是有什么属性没有设置导致就是不能收到仪器发回的数据呢,还请前辈帮我看看代码啊!
 楼主| 发表于 2004-11-4 21:34:57 | 显示全部楼层
大家都不看我的贴吗,好头痛啊
发表于 2004-11-4 21:41:55 | 显示全部楼层
我们没有设备,不可能调试你的代码。
这种问题你还是找个懂行的高手,把他拉到现场看看,才能确认问题所在。
 楼主| 发表于 2004-11-4 22:02:24 | 显示全部楼层
谢谢回复啊!我这都找不到这样的同志啊,能帮我看看我串口属性设置是不是有不妥啊!别的地方都没有什么名堂,感觉要出问题肯定是这个地方出
谢谢了
发表于 2004-11-4 23:30:13 | 显示全部楼层
你可以先试试我的程序,我的程序由于我也没有任何设备,只是用我的二个串口连上写的。
也不知道怎么样。
不过了胜于无吧。
http://211.92.88.40/~wide288/
看看吧。
 楼主| 发表于 2004-11-5 07:56:07 | 显示全部楼层
谢谢啊,马上试试看
发表于 2004-11-6 17:54:31 | 显示全部楼层
结果,怎么样了?
我也想知道啊。
 楼主| 发表于 2004-11-7 14:39:02 | 显示全部楼层
是不是要在命令行下才能运行啊,直接双击没有动静,这两天没有空再试,明天继续实验
发表于 2004-11-7 17:26:00 | 显示全部楼层
双击与命令行下运行有区别吗?
我没装 gnome 不知道。
但是要用到 gtk 库的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表