社区
Delphi
帖子详情
高難問題:怎樣主動去抓取對方機器的串口信號呢?
joshua8888
2003-09-30 09:43:27
我現在要接收對方機器串口的數據,但是不需要對方去發送,本機直接主動去抓取信號過來 ;我要怎樣實現這樣直接接收呢?就是不停監聽信號
比如:如果我發送一個信號e(即字母)過去,然後得到對應的值(450),若有誤,則重復獲取,該怎麼寫呢?
...全文
126
6
打赏
收藏
高難問題:怎樣主動去抓取對方機器的串口信號呢?
我現在要接收對方機器串口的數據,但是不需要對方去發送,本機直接主動去抓取信號過來 ;我要怎樣實現這樣直接接收呢?就是不停監聽信號 比如:如果我發送一個信號e(即字母)過去,然後得到對應的值(450),若有誤,則重復獲取,該怎麼寫呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
joshua8888
2003-10-03
打赏
举报
回复
谢谢各位,我用spcomm写了一个可以传送接收的功能,是不是你只要发送一个信号过去,就会返回一个信号,并且我还要判断如果有乱码,就重复发送接收。
jpyc
2003-10-03
打赏
举报
回复
就是你用串口收到数据后,要通过程序进行判断,是否为正确是沪剧,判断后才能确定是否要求重复发送,这里一般是由协议规定的,一般也不能老是错了就要求重发,否则可能造成死循环。
spcomm写的例子也有一个:
http://218.56.11.178:8020/web/index.aspx
-》下载基地-》例程-硬件控制-》spcom事例程序
yzykjh
2003-09-30
打赏
举报
回复
“九品御厨”对串口在行,多问问他。
aiirii
2003-09-30
打赏
举报
回复
根据你说的要求,只要你设置对应的通信参数,打开串口,如果对方有数据发送,你这边的控件就能收到,或触发一个事件让你处理!
jpyc
2003-09-30
打赏
举报
回复
接收数据的方法:在控件中有OnTrigger事件
jpyc
2003-09-30
打赏
举报
回复
delphi中常用串口控件简介:
mscomm:微软的东西,是VB中带的一个ActiveX控件,使用简单,性能一般,由于是ActivX控件,打包时需要注册好多信息,在Delphi中使用,建议使用VCL控件,编译程序时直接编入程序中,再不需任何其它处理。
spcomm:比较好的vcl控件,算是比较专业的,解剖了一下,功能比较完善。
TurboPower:公认的专业通讯vcl控件。可以到其站点下载,开放源码了。
我在制作串口通讯软件时三种都用过,最终全部使用TurboPower!所以也推荐大家使用它。
写了个例子,基本的串口通讯都可以实现,可提供参考:
下载基地-》文件名称:串口通讯控制器
版权声明:以下本文只允许在本站观看,不得以任何媒体方式进行传播。
发表意见请到留言版。
TurboPower串口通讯实际应用:
在串口通讯时有字符和十六进制两种数据传输方式,不论使用哪种方式,只要能正确收到数据就是目的,至于收到数据后如何处理,就要根据具体的情况来定了。
1.接收数据的方法:
轮询和中断(利用windows消息激发事件)。
1)轮询:每间隔一定的时间查询一下串口接收缓存中有无数据,有就读出来。这种方法是很毫资源的,即没事找事。
2)中断:在控件中有OnTrigger事件,当串口收到数据后,即触发此事件,无数据时什么都不做,在这个事件中接收数据就比较科学了。
所以,提倡使用控件中的OnTrigger事件接收数据。
2.通讯协议的制定:
接收数据的一般处理方法,最基本的思路就是通过协议进行分析,所以协议的制定是至关重要的:
1)首先要确定指令的起始点,从大量的数据流中将指令分离出来,没有起始标志的话,结果就可想而知了,一串无效的费数据!
2)然后就是指令结束识别点,可以利用指令的长度(如果长度一定或有表示长度的数据)或结束标志来确定,当然还可以利用下一条指令的指令头。
3)既然头尾都明确了,指令的截取想来不是什么问题了吧!但还有一种情况就是数据错误是的容错,如何容错呢,最简单的办法:发现不符合格式的指令,就将其抛掉或特殊处理(如要求重发)一下!
4)有效数据中如果增加一些校验,通讯将会更加可靠!
例:#(指令头)**(指令功能)0123456789(有效数据)**(有效数据校验和)%(指令尾)
注:**代表变动值。
3.接收数据的分析技巧:
通讯协议制定好后,一切将以通讯协议为中心。一套协议中的所有指令可能长度都是统一的,也有可能是长短不同的,并且在OnTrigger事件中实际反应速度及快,可能一条指令数据还没有完全收齐就已经触发了此事件,即收到了半截指令,并且有可能继续收取的数据中除了下半截指令外,还有下一条指令的前半截,如何处理?
我在做这种处理时是利用全局变量,将串口收到的所有数据都收到该串中,然后按指令格式进行截取,发现不合法指令做一下特殊处理(如要求重发)或抛弃。
如收到的数据串为:
#**0000012000**%#**0000000343#**000000540560**%#**0002200000**%
分段截为:
#**0000012000**%
#**0000000343
#**000000540560**%
#**0002200000**%
四条指令,其中:#**0000000343不完整,检测到后进行抛弃处理。
调试技巧篇:
对于已了解协议的支持串口产品,要想进行编程控制,可以使用“串口通讯控制器”进行调试,以摸清具体实现数据,可按如下步骤进行:
1.确定硬件连接无误,这是首要条件,如果错误将没有成功的可能;
连线必须正确,必要时可以使用计算机自带的多个端口相互进行测试,已保证硬件的连接无误。串口通讯线有9针和25针,多用9针,其中最重要的是2(RXD)、3(TXD)、5(GND)线,对应关系如下:
9针 25针
2 -- 3
3 -- 2
5 -- 7
2.确定通讯参数正确,如:波特率、奇偶校验位、数据位、停止位等,以及收发的是十六进制还是字符串:
3.以上确保正确,则使用“串口通讯控制器”,按协议输入数据进行收发控制了。
注意:有的仪器需要进行初始化,即先发一段激活指令,然后才能进入工作状态,这种设置主要是为了实现利用硬件为软件加密,即类似加密狗,需要有激活方法才行,不过该类方法使用较少。
原创作者:JPYC,望业界专家多多指正!控件及例程源码请到:http://www.kaer.cn/default.aspx->下载基地
9月美国CPI点评:美国通胀居高难下.pdf
9月美国CPI点评:美国通胀居高难下.pdf
国际宏观评论-民生证券-9月美国CPI点评:美国通胀居高难下.pdf
国际宏观评论-民生证券-9月美国CPI点评:美国通胀居高难下.pdf
国际宏观研究-山西证券-海外宏观研究:全球疫情边际改善,美国CPI居高难下.pdf
国际宏观研究-山西证券-海外宏观研究:全球疫情边际改善,美国CPI居高难下.pdf
高难初中英语竞赛试卷(含答案).docx
高难初中英语竞赛试卷(含答案).docx
八大行业高难废水关键处理技术及典型工艺.pdf
八大行业高难废水关键处理技术及典型工艺.pdf
Delphi
5,388
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章