免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Chennysky
打印 上一主题 下一主题

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

论坛徽章:
0
21 [报告]
发表于 2006-03-02 10:46 |只看该作者
这里也提过串口发送文件的问题!

可是我还是希望使用perl 发送或接收文件呢。用C接收文件的程序没有写好,并且我担心 我关闭Perl的串口,再打开C的串口,中间就有数据丢失了

论坛徽章:
0
22 [报告]
发表于 2006-03-07 12:10 |只看该作者

回复 17楼 sunbeat 的帖子

大虾,不知道能否贡献写得短信发送程序?
Basin 该用户已被删除
23 [报告]
发表于 2006-03-07 16:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

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

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

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

Thanks!

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

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

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

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

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

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

Thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP