C#的串口通信的datarecieved事件

问题描述

本人初学串口通信,要实现一个实时的轮询和控制系统。要求和我看过的某帖类似,就是1、上位机下发的命令比较密集,以200ms周期发送实时状态轮询命令。2、在状态实时轮询命令中间有操作命令插入。3、不同的命令,接收的应答格式也不同。然后我在不同的获取数据的命令中给datareceived订阅了不同的处理函数,这些处理函数结尾又都解除自身的订阅。想问如果处理函数在200ms内不能完成,上位机的命令又来,datareceived会自动触发吗?此时触发的处理函数又是哪个?是当前仍在运行的处理函数还是其他?在别处看到说先收下数据,然后单开一个处理线程去处理数据,但线程不太熟悉,还是没有具体思路。求高手帮忙!

解决方案

解决方案二:
如果是同步的,就不会触发,所以你最好将数据接收到内存,后台开线程,去异步处理
解决方案三:
请问默认是同步还是异步的?我没看见相关的设置选项。按您的意思,我应该在datareceived订阅的处理函数中只进行读取放到内存,然后在后台开线程,去处理内存中的数据是吧。那么我应该对在内存中读取这些数据的代码加锁。虽然现在还没进行过测试,但我觉得如果处理任务很大,有可能超过500ms的读取超时,这时应该怎么办呢?谢谢
解决方案四:
上位机与单片机串口通信一般你发一条请求他给你一个数据所以最好同步接收,异步很难确认哪个单片机返回数据,还有很难确定大于200ms每次的间隔。datareceived是异步接收的,所以单片机给个指令datareceived会从后台线程池取个线程处理。同一个函数多个io线程调用
解决方案五:
你也可以做成同步接收,不使用datareceived,直接开启一个线程,负责数据的发送和接收,每一次通讯前,加锁,以防同时多个地方调用发送数据的函数,保证同一时刻只有一个通讯命令在交互,在这个交互未完成前,其他调用者只能等待。
解决方案六:
我的做法是这样的,给你参考下用DataReceived事件接收,只订阅一个DataReceived事件,但是根据接收到的数据不同,进行不同的处理1、在DataReceived事件中收取数据,将收到的数据存起来2、判断接收到的数据是否符合格式要求3、针对不同的命令进行不同的操作比如:if(命令1),调用函数1if(命令2),调用函数2。。。
解决方案七:
参考一下这个看看能不能解决:http://vsdot.net/2013/04/com-programming.html
解决方案八:
引用5楼leafmao的回复:

我的做法是这样的,给你参考下用DataReceived事件接收,只订阅一个DataReceived事件,但是根据接收到的数据不同,进行不同的处理1、在DataReceived事件中收取数据,将收到的数据存起来2、判断接收到的数据是否符合格式要求3、针对不同的命令进行不同的操作比如:if(命令1),调用函数1if(命令2),调用函数2。。。

我是用timer_tick自动轮流发送3条数据,每个接收格式不一样,想要每发一条之后在DataReceived里面执行你说的这三条,但是每次都是执行一句DataReceived里面的语句就跳回到timer_tick,然后在跳回DataReceived里的第二条,再跳回去,导致发送第二条数据时还在执行接收第一条的语句,你说的只订阅一个DataReceived是怎么回事,怎么样才能发送一条对应接收一条符合格式要求的然后再发下一条?谢谢
解决方案九:
你只有一个串口,订阅多个DataReceived的没有意义的行为如果多个数据之间你无法区分,改为同步发送接收如果数据中带有指令,地址之类的,能够区分不同数据的,你接收到数据之后放到一个List<byte>数组中统一处理一下即可
解决方案十:
而且串口不是以太网,它是半双工的,只能一发一收,你使用异步方式读写,并不能提高效率
解决方案十一:
引用8楼Z65443344的回复:

你只有一个串口,订阅多个DataReceived的没有意义的行为如果多个数据之间你无法区分,改为同步发送接收如果数据中带有指令,地址之类的,能够区分不同数据的,你接收到数据之后放到一个List<byte>数组中统一处理一下即可

不好意思麻烦再问一下怎样改成同步接收,刚刚入门还有很多不懂的

时间: 2024-12-23 10:55:20

C#的串口通信的datarecieved事件的相关文章

急,关于串口通信收发同步的问题

问题描述 由于某种原因,串口发送被写在了一个循环里面,表示需要多次发送,然而希望是发-收-发-收这样的步调同步工作.根据跟踪,发现目前的程序必须在所有循环执行完毕,也就是所有发送动作完成后,才会去执行串口的DATARECIEVE事件,去读缓冲.如何实现这样的同步呢?发送的代码是这样的:foreach(intiFNinSelectedFN){//**AFN,FN都有了,其他在界面上填入,开始组建通信帧textFN.Text=iFN.ToString();List<byte>frame=newLi

VisualBasic串口通信程序设计

1mscomm.vbx通信控件描述 mscomm.vbx通信控件可直接从vb的toolbox中加入窗体form,即可用其进行通信.若toolbox中无此控件,则用tools的customcontrols将mscomm.vbx从windows的system子目录中加入vb的toolbox中. 1.1通信方式 mscomm.vbx有2种不同的方式来处理和解决各类通信软件的开发和设计问题 1.事件驱动.它与c/c 写windows软件时的窗口回调函数类似,是1种功能强大的处理问题的方法.在实际工作中,

linux编程-linux串口通信问题,急急急!!!

问题描述 linux串口通信问题,急急急!!! 我在开发板上qt程序,开发板跟PC机的虚拟机通过USB转串口线连接,上面运行的是Ubuntu12.04系统,我在PC上发送字符串,然后在开发板上接收,接收的数据单个单个字符接收,为什么不是一整个字符串接收呢?并且接收不到第一个字符,而且差不多接收10秒之后就不在接收数据了!!!!.请各位大神赐教!!! int fd,num,rtn; struct termios options; fd = open("/dev/ttyUSB0", O_R

.NET 串口通信

原文:.NET 串口通信 这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通信. 串口通信,以前一直觉得神秘,没想到用起来却这么简单.当然,这样简单要归功于 .NET 对其操作的封装. .NET 里提供了专门操作串口的类 System.IO.Ports.SerialPort,可以操作串口收发数据.只需要 new 一个对象,简单配置一下相关属性,就可

java串口通信

java串口通信API说明 java串口通信 2008/09/22 20:24 java串口通信API说明 java串口通信    Java提供了 CommunicationAPI(包含于javax.comm包中)用于通过与机器无关的方式,控制各种外部设备.Communications API,是标准的Java的扩展部分,它在JavaAPI中是没有附带的.因此,必须先在SUN公司网站的Java站点(www.java.sun.com)上下载这个扩展类库. 1.1Communications API

串口通信内存泄露-C#串口通信高速向下位机发送数据出现内存不断增加

问题描述 C#串口通信高速向下位机发送数据出现内存不断增加 using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.IO.Ports; using System.Windows.Forms; namespace MSPCS { /// /// 通讯端口,用于和上位机通讯 /// 上行与下行使用同一种格式: /// /* 同步头 6 Byte EB90EB9

《单片机串口通信及测控应用实战详解》——6.3 PC端程序设计

6.3 PC端程序设计 单片机串口通信及测控应用实战详解 6.3.1 采用Visual Basic实现 1.程序界面设计 运行VB 6.0,创建标准的工程项目文件,设计程序窗体. (1)添加1个MSComm控件用于实现PC与单片机串口通信. (2)添加2个按钮控件CommandButton,用于输出指令和关闭程序. (3)添加3个文本控件TextBox,用于输入单片机地址.继电器状态和返回数据. (4)添加5个标签控件Label,用于显示文本框功能等. 2.属性设置 程序窗体.控件对象的主要属性

VB串口通信出现实时错误8020

问题描述 本人VB新手,最近用USB转RS232用VB编写出现了8020的问题,操作系统是WIN764位.用串口调试助手测试是没有问题的,可以发送接受数据,驱动说明没有问题.程序是从CSDN论坛上下载的(VB串口通信程序(VB程序)).请问各位大神有什么办法解决吗?下面附上代码和一些串口调试助手,和端口截图.代码:PrivateSubCMDRe_Click()TRe.Text=TRe.Text&vbCrLf&CStr(MSComm1.Input)MsgBox"2222first&

081_《Delphi串口通信编程》

<Delphi串口通信编程> Delphi 教程 系列书籍 (081) <Delphi串口通信编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 作者: 黄军 熊勇 刘燕 刘晓梅 丛书名: 其他 出版社:人民邮电出版社 ISBN:7115095647 上架时间:2001-9-5 出版日期:2001 年8月 页码:348 版次:1-1 内容简介 本书详尽地介绍了Delphi串口通信编程技术,并通过丰富的范例