关于处理串口数据的问题?

蜀天下100000 2018-05-17 02:20:47
检测设备状态:50-100台,每台设备7个十六进制
COM口一次读取多台,
如有三台反回:17 00 01 02 05 02 01 00 00 03 00 05 03 02 00 00 00 00 01 06 03 00 00 00 00 06
可能多达几百字段,一次性读取,

数据要分析,更新状态,写入数据库,这种怎么处理好?要不要用多线程?
...全文
1151 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
看那山瞧那水 2018-05-22
  • 打赏
  • 举报
回复
引用 11 楼 weixin_42173539 的回复:
没有说清,串口接在终继器上的,一次从终继器过来一串数据(几十个台的数据的)
这个中继器估计就是下位控制器了,和设备的通信由这个中继器处理,中继器和上位机(电脑)的通信就是简单的232了吧。 1,接收数据的频率低(意思是每批数据的间隔比较长,并且批数据间隔比较稳定),上位软件来得及处理数据(包括接收数据,分析数据,存储数据,显示数据),那就不用线程。 2,接收数据频率高,不能及时处理接收数据,那就用线程,并做好数据缓冲。 建议用线程,这样适用性强。(不要把线程想的那么神秘,用了就会,这个论坛里有好多通信方面的处理线程,找找)
  • 打赏
  • 举报
回复
引用 10 楼 SupermanTm 的回复:
[quote=引用 9 楼 weixin_42173539 的回复:] [quote=引用 8 楼 DelphiGuy 的回复:] 485不只支持点对点通信,也支持网络拓扑结构(好像485只支持总线型拓扑结构、422支持星型环型拓扑结构,没有深入了解),可以支持数十台设备联网,最高数据传输率可以达到10Mbps级别,如果楼主说的“一个COM口接收几十个台设备数据”是这种工控应用场景的话,还是有点复杂度的。
拆解后的处理工作会很耗时,我想用Timer1定时处理,但这么程序会死,用多线程没有经验!!![/quote] RS422/485“最高数据传输率可以达到10Mbps级别”这个说法是不严谨的,RS422/485只是定义了硬件规范和逻辑,以OSI的层次只是最下面的物理层,它本身没有bps的概念,只能说总线频率。 [/quote] 485确实没有定义传输协议,只有信号级控制,协议由使用者自己设计(普遍采用的协议比如异步串行通信协议),但是说“只是最下面的物理层,它本身没有bps的概念,只能说总线频率”这个就不对了,物理层的指标决定了最高性能,实际上不止232/422/485,诸如以太网、USB、PCIe、 SATA之类的规范,其给出的传输率都是物理层指标,参考设备厂家的规格说明: 以太网物理层芯片:http://www.ti.com/interface/ethernet/phy/overview.html 485收发器:http://www.ti.com/product/thvd1450 注意它里面写的Signaling Rate (Max) (Mbps) 就是物理层的数据传输率,可以参考维基百科上的解释。
SupermanTm 2018-05-19
  • 打赏
  • 举报
回复
引用 9 楼 weixin_42173539 的回复:
[quote=引用 8 楼 DelphiGuy 的回复:] 485不只支持点对点通信,也支持网络拓扑结构(好像485只支持总线型拓扑结构、422支持星型环型拓扑结构,没有深入了解),可以支持数十台设备联网,最高数据传输率可以达到10Mbps级别,如果楼主说的“一个COM口接收几十个台设备数据”是这种工控应用场景的话,还是有点复杂度的。
拆解后的处理工作会很耗时,我想用Timer1定时处理,但这么程序会死,用多线程没有经验!!![/quote] RS422/485“最高数据传输率可以达到10Mbps级别”这个说法是不严谨的,RS422/485只是定义了硬件规范和逻辑,以OSI的层次只是最下面的物理层,它本身没有bps的概念,只能说总线频率。 楼主的问题估计不是“一个COM口接收几十个台设备数据”,应该是几十台设备的数据在一个COM口过来,至于底层的拓扑构成这里没有表述,也跟软件无关,问题应该在于“断帧”,就是如何在一个数据流里截取出属于每一个设备的数据,如果问题在这里,那么就需要明确的协议去支持了,否则是得不到断帧的条件的,这跟多不多线程无关,也跟所谓的处理工作耗时无关。
SupermanTm 2018-05-19
  • 打赏
  • 举报
回复
需要给出明确的通讯协议文本才能设计对应的解释程序哦
蜀天下100000 2018-05-19
  • 打赏
  • 举报
回复
没有说清,串口接在终继器上的,一次从终继器过来一串数据(几十个台的数据的)
SupermanTm 2018-05-18
  • 打赏
  • 举报
回复
每必要多线程,如果你觉得是界面卡住的话,建议是用消息机制,每个字段(ListBox的一个Item)发一条消息给主窗口(用PostMessage),让主窗口去处理自己的消息队列,不就7字节一个字段嘛,直接填写在 WPARAM 和 LPARAM 就得了。
蜀天下100000 2018-05-18
  • 打赏
  • 举报
回复
引用 8 楼 DelphiGuy 的回复:
485不只支持点对点通信,也支持网络拓扑结构(好像485只支持总线型拓扑结构、422支持星型环型拓扑结构,没有深入了解),可以支持数十台设备联网,最高数据传输率可以达到10Mbps级别,如果楼主说的“一个COM口接收几十个台设备数据”是这种工控应用场景的话,还是有点复杂度的。
拆解后的处理工作会很耗时,我想用Timer1定时处理,但这么程序会死,用多线程没有经验!!!
  • 打赏
  • 举报
回复
485不只支持点对点通信,也支持网络拓扑结构(好像485只支持总线型拓扑结构、422支持星型环型拓扑结构,没有深入了解),可以支持数十台设备联网,最高数据传输率可以达到10Mbps级别,如果楼主说的“一个COM口接收几十个台设备数据”是这种工控应用场景的话,还是有点复杂度的。
蜀天下100000 2018-05-18
  • 打赏
  • 举报
回复
处理耗时有点多,一个COM口接收几十个台设备数据,还要: //1、存放原数据 //2、更新数据库 //3、每台设备有1-8个端口状态数据要拆解,更新端口状态图标,
蜀天下100000 2018-05-18
  • 打赏
  • 举报
回复
引用 5 楼 jankercsdn 的回复:
COM口怎么能“同时”读多个设备?232,485总线都不可能同时,除非用LAN。(这个真不明白是怎么个同时法) 建议用线程,至少一个线程用于发送和接收数据,这样才不会丢数据,也比较好处理数据。这个线程是必要的,和数据量的大小无关。 根据实际情况看要不要其它线程(用于分析,保存数据),你这个数据比较少,可以不用第二个线程。
有没有实例参考下,经验不足啊
看那山瞧那水 2018-05-18
  • 打赏
  • 举报
回复
COM口怎么能“同时”读多个设备?232,485总线都不可能同时,除非用LAN。(这个真不明白是怎么个同时法) 建议用线程,至少一个线程用于发送和接收数据,这样才不会丢数据,也比较好处理数据。这个线程是必要的,和数据量的大小无关。 根据实际情况看要不要其它线程(用于分析,保存数据),你这个数据比较少,可以不用第二个线程。
蜀天下100000 2018-05-17
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
就这点数据,几百字段也才几KB,要什么多线程,非要多线程,一个线程读数据,一个处理即可
读取数据就用主线种的Comm1事件 处理想用Timer1定时处理,这样程序会死掉
蜀天下100000 2018-05-17
  • 打赏
  • 举报
回复
procedure TFormWorkView.Timer1Timer(Sender: TObject); var ByteArray: array of Byte; i:integer; y:integer; Number:integer; Devstr:string; begin ListBox1.Clear; //setlength(ByteArray,length(relaystr)); setlength(ByteArray,7); //Edit2.Text:=inttostr(length(relaystr)); Number:=(length(relaystr)-5) div 7; for i:=0 to Number-1 do begin Devstr:=copy(relaystr,5+i*7,7); for y:=0 to length(Devstr)-1 do begin ByteArray[y]:=byte(Devstr[y+1]); end; //这里处理数据,要更新动态按纽的图标、还要每条写入数据库,多子,介面会死掉 ListBox1.Items.Add(inttostr(ByteArray[0])+'-'+inttostr(ByteArray[1])+'-'+inttostr(MAKEWORD(ByteArray[2],ByteArray[3]))); end; end;
  • 打赏
  • 举报
回复
就这点数据,几百字段也才几KB,要什么多线程,非要多线程,一个线程读数据,一个处理即可
001、VB串口通讯视频教程源码41个 002、Visual Basic串口通信工程开发实例导航随书源码7个 003、Visual Basic串口通信与测控应用技术实战详解 源代码(15个全) 004、GE PLC串口通讯,VB编制,读取内存单元 005、PC机与51单片机之间的串口通讯,VB编的,分PC和单片机两部分 006、VB6的串口通信程序,还有crc校验 007、VB Modbus RTU源码,其中协议部分已生成DLL,可直接调用 008、VB.net开发的串口调试程序 009、VB.net实现串口编程,希望大家有用 010、VB版串口调试程序,包含VB源码及安装文件,适合调试串口 011、VB编程RS232串口控制DA数模转换 012、VB编程实现的串口调试工具源码 013、VB编写的RS232串口通信测试程序,以txt格式接受,可定义发送字符 014、VB编写的SouthStar串口测试与51串口烧写器V1.0版 015、VB编写的串口调试助手1.0的源码 016、VB编写的串口短信发送程序,需要数据线支持 017、VB编写的串口通信程序,实现多机通信 018、VB编写的串口通信程序,主要用于上位机与下位机间的通信 019、VB编写的串口通信程序界面参考网上的程序较简单 020、VB编写的串口通讯界面,主要面向51单片机的串口通信 021、VB编写的单片机和PC串口通信的调试程序 022、VB编写的仿真实电子琴操作界面,包含与FPGA串口通信的功能 023、VB串口API通讯,附带BAS文件全部源码,实现与饭卡读卡器通讯 024、VB串口编程,关于上位机的应用,特别适合初级学习VB的学员 025、VB串口编程调试精灵源码 026、VB串口编程实现完整的多费率电表读数软件 027、VB串口程序,,是一个串口使用例程,对初学者有用,特别是工控类的 028、VB串口传输文本,实现2台PC间的通信,类似简单的聊天工具 029、VB串口的一个电子称的项目 030、VB串口调试程序,用于通过串口控制松下空调测试 031、VB串口调试程序及源码 032、VB串口调试软件源代码,可以参考修改为其它通讯程序 033、VB串口调试软件源文件 034、VB串口控制步进电机程序完整源码 035、VB串口通信 6路10位AD转换数据采集源程序 036、VB串口通信,API串口通信模块源码 037、VB串口通信,适用简单,适合初学者 038、VB串口通信操作界面,进行数据采集,画实时曲线 039、VB串口通信程序,可以读取串口并显示保存数据,且能显示数据曲线 040、VB串口通信的源码,学习的好资料 041、VB串口通信调试器的源码程序 042、VB串口通信设计视频演示源码 043、VB串口通信示例 044、VB串口通信数据源码 045、VB串口通信之串口接收程序 046、VB串口通讯测试源代码,有文本和图形两种端口数据观察方式 047、VB串口通讯程序,用来跟单片机通讯 048、VB串口通讯代码(部分) 049、VB串口通讯的参考源程序 050、VB串口通讯实例 高精度电压表(24bit) VB源程序 051、vb串口通讯示例 052、VB串口与伺服电机DSP2407通讯完整代码源程序 053、VB串口源码,动力电池检测数据采集,内含电导巡检模块通讯报文,可,读写,保存,备份数据 054、VB串口字节通信程序,包括:1字节发送子程序,n字节接收子程序 055、VB串行口通信测试示例 056、VB串行通信试验程序 057、VB的MODEM通信源代码,智能化水电远端数据读取系统 058、VB的串口源程序,包括串口的配置界面,接收功能和发送功能 059、VB访问串口,并读取电子秤上显示的数据 060、VB和西门子S7-300 PLC串口通讯程序能实现读写功能 061、VB检测串口工作状态 062、VB简单的串口短信收发功能,使用短信猫测试通过 063、VB开发串口通信,关于生物医学工程专业的血氧饱和度的设计 064、VB开发串口通信软件,利用按钮控件控制高清晰数字展示台 065、VB开发的RS232串口图像处理器驱动(摄像头驱动) 066、VB开发的串口通信源码 067、VB开发的串口与三菱FX PLC通讯源码 068、VB控制串口232通讯,对飞利浦M1卡内数据进行处理,支持密码修改等 069、VB利用Mscomm控件编写的通讯终端,可做串口通讯编程参考示例 070、VB平台单片机与PC机串口通信的PC端程序。小巧易用,功能丰富 071、VB嵌入式串口通讯波形分析显示软件 072、VB实现串口调试LED信息显示屏设备主要代码 073、VB实现串口调试工具的完整源码 074、vb实现串口通信 文件传送系统,用vb以及mscomm控件实现 075、VB实现串口通信,发送命令从而接收相应数据 076、VB使用mscom控件实现PC机与单片机串口通信 077、VB通过COM串口读取条形码设备 078、VB通过串口控制单片机读写24C02源代码 079、VB通讯程序,连接串口可在电脑显示来电号码 080、VB下的串口发短信程序,可选择端口,设置短信中心号码 081、VB写的串口通信,发送和接收实例 082、VB写的串口通信分析程序源码 083、VB写的串口通讯,通过串口对单片机进行控制 084、VB写的串口通讯软件,简单易学,适合初学者 085、VB写的通过串口与考勤机连接通讯的程序 086、vb用控件的写的串口程序,是vb的经典之作 087、VB与USB转串口的通讯完整程序,有详细说明,不需要安装驱动 088、vb与串口通信的关于回路测试的小程序很实用 089、vb语言开发的串口通信,可实现拨号传送文件等 090、VB中串口事件处理函数的示例 091、VB中的串口通讯,串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用 092、VB自动枚举系统串口加摄象头图象采集,坐标系变换 093、Visual Basic2005与自动化系统监控(串并行控制)光盘
里面讲了MSComm控件 、 WinAPI 串口通信、CSerial类,例子很详实,每一步操作都有解释。作者是龚建伟,有一个个人主页www.gjwtech.com,讲串口通信的内容比较多,还行,大家可以先看看这个主页。 本书目录 第1章轻松体验串口通信编程与调试 1.1初识串口 1.1.1从外观上了解串口 1.1.2 串口通信的发展前景 1.2 自己制作简单的串口线 1.2.1 三线制串口接线的规定 1.2.2 焊接制作自己的串口连接线 1.3 调试串口通信程序时的几种使用串口的技巧 1.3.1 查看计算机串口资源 1.3.2 常规调试-2个物理串口之间的通信 1.3.3 特殊调试-单个物理串口之间的通信 1.3.4 虚拟串口-为计算机添加取之不尽的串口资源 1.4 使用串口调试助手来体验串口通信 1.5体验Windows环境下Visual C++串口通信编程 1.6体验DOS环境下Turbo C串口通信编程 第2章 VC多线程串口编程工具CSerialPort类 2.1 类功能及成员函数介绍 2.2 应用CSerialPort类编制基于对话框的应用程序 2.3 应用CSerialPort类编制基于单文档的应用程序 2.4对CSerialPort类的改进 2.5 在Visual C++.NET中应用CSerialPort类 第3章 控件MSComm串口编程 3.1 MSComm控件详细介绍 3.1.1 VC中应用MSComm控件编程步骤 3.1.2 MSComm控件串行通信处理方式 3.1.3 MSComm 控件的属性说明 3.1.4 MSComm控件错误信息 3.2使用MSComm控件的几个疑难问题 3.2.1使用VARIANT 和SAFEARRAY 数据类型从串口读写数据 3.2.2 MSComm控件能离开对话框独立存在吗? 3.2.3 如何发送接收ASCII值为0和大于128的字符? 3.2.4 在同一程序中用MSComm控件控制多个串口的具体操作方法 3.2.5解决使用控件编程时程序占用的内存会不断增大的问题 3.2.6在没有安装Visual Studio的计算机上如何使用MSComm控件 3.2.7 在MSComm控件串口编程时遇到的其它问题说明 3.3在基于单文档(SDI)程序中应用MSComm控件 3.4应用MSComm控件控制多个串口实例 第4章 Windows API串口编程 4.1 Windows API串口编程概述 4.2 API串口编程中用到的结构及相关概念说明 4.2.1 DCB(Device Control Block)结构 4.2.2超时设置COMMTIMEOUTS结构 4.2.3 OVERLAPPED异步I/O重叠结构 4.2.4 通信错误与通信设备状态 4.2.5 串行通信事件 4.3 Windows API串行通信函数 4.4 Win32 API串口通信编程的一般流程和特殊实例 4.4.1 Win32 API串口通信编程的一般流程 4.4.2 用查询方式读串口 4.4.3同步I/O读写数据 4.4.4 关于流控制的设置问题 4.5 CSerialPort类中的API函数编程应用剖析 4.6 Win32 API串口编程TTY(虚拟终端)实例 4.7 Windows API串口精简例程 第5章 串口调试助手V2.2详细编程 5.1 建立SCOMM程序工程实现界面功能 5.2 串口的初始化及关闭 5.3串口数据的发送与接收及十六进制数据处理 5.3.1 十六进数据发送处理 5.3.2 手动发送处理 5.3.3自动发送处理 5.3.4 接收处理及十六进制显示 5.4 其它辅助功能的实现 5.4.1 接收数据的文件保存 5.4.2 实现小文件发送 5.4.3 图钉按钮功能使程序能浮在最上层 5.4.4 对话框动画图标的实现 5.4.5 超链接功能的实现 5.4.6 如何打开帮助网页文件 第6章 DOS环境下的Turbo C串口编程及通用实例GSerial类 6.1 PC机异步通信适配器8250及其编程操作 6.1.1 INS8250内部寄存器及其选择方式 6.1.2 波特率设置 6.1.3数据位、奇偶校验、停止位等数据格式设置 6.1.4 查询I/O方式相关设置 6.1.5 中断I/O通信方式相关设置 6.1.6 Modem寄存器 6.2 COMRXTX程序实例

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧