免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 6912 | 回复: 30
打印 上一主题 下一主题

Perl 如何实现串行通信啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-06 15:46 |只看该作者 |正序浏览
有人说直接 将 com1 当成文件就可以了
有人建议用 Win32::SerialPort ( 基于 Win32API::CommPort )

各位有什么好建议?有没有相关的源代码供参考一下?谢谢

open(FH,">>COM1") or die "$!\nCant't create";
print FH `dir`;

虽然没有报错,可是我从哪儿查看结果呢?
怎么可以用串口实现 超级终端 的功能,将多个命令顺序执行呢?

谢谢各位

论坛徽章:
0
31 [报告]
发表于 2006-03-27 10:46 |只看该作者

呵呵,结贴!

经过反复调试、测试与跟踪,后来发现是经com发送数据到PC的那个函数有问题
它在处理时就将 “0A”变成了 “0D0A”,(可能用于其他用途吧)
后来只好重新写了一个新的函数发送数据到PC,现在OK!

打扰大家这么久,不好意思!

论坛徽章:
0
30 [报告]
发表于 2006-03-22 09:44 |只看该作者
呵呵,我是用于测试用的

当然 这个串口接收数据的程序用C写也是可以的
估计我得这么做了

Thanks

论坛徽章:
0
29 [报告]
发表于 2006-03-21 21:39 |只看该作者
为什么一定要用perl来做串口呢?

论坛徽章:
0
28 [报告]
发表于 2006-03-21 10:31 |只看该作者

新发现!

发现:使用SerialPort,串口本身就是以二进制打开的
#  binmode (FH); #这样会出错
就当然会出错了

Ports are opened for binary transfers. A separate binmode is not needed.
(From CPAN)

可是 0A变成0D0A
还是会发生,我用PC上的一个同样的二进制文件进行逐字节读出写入,没有发现这样的问题,串口怎么就出错了呢?

继续努力中!这个串口搞了我好久哦

论坛徽章:
0
27 [报告]
发表于 2006-03-15 17:24 |只看该作者
不好意思,一直跟这个贴是因为问题还没有很好的解决:

0A变成0D0A
AF变成0DAF

估计是因为 读串口时,直接将串口当成了文本文件,如果将它转化为二进制文件该不会有问题吧
可是 binmode (FH);   #FH 是串口句柄

会出错Can't locate object method "BINMODE" via package "Win32::SerialPort"。

这该怎么办呢?

论坛徽章:
0
26 [报告]
发表于 2006-03-13 16:16 |只看该作者
基本问题:

从串口传回PC的数据放在哪儿了呢?这个缓冲区的大小有限制么?如果1分钟内不取出,数据会一直保存在那个缓冲区的么?

论坛徽章:
0
25 [报告]
发表于 2006-03-10 20:36 |只看该作者
串口发送多大的文件一般都不会出错。
但是在数据线过长,波特率过高,有时会出错。像你的情况肯定是程序的问题

论坛徽章:
0
24 [报告]
发表于 2006-03-10 17:48 |只看该作者
进展:
我在读取 com 传递给PC的数据流(二进制,逐字节传输)时,发现问题:
0A变成0D0A
AF变成0DAF

只好经过判断将其中的0D去掉,这样可以接收到一些10K以下的文件,测试2个文件成功
可是一旦原二进制文件中就有 0D0A ,0DAF 在一起连着的呢?我就无法处理了!

问题:com 怎么会将 0A变成0D0A(实际是换行),AF变成0DAF的呢?我该如何传送或接收才会避免这种问题?

Thanks!
Basin 该用户已被删除
23 [报告]
发表于 2006-03-07 16:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP