wince下读串口SerialPort.DataReceived问题

airskys 2010-05-25 11:40:29
wince是5.0
开发工具用的是vs2005
从工具箱拖SerialPort出来,使用其DataReceived来接受处理到的数据
发现一个问题
串口打开后,只能接收一次数据,后面的就接收不到了
除非你关闭串口,再次打开,这样才能接收到新的数据
不知道有没有人也碰到这样的情况
帮忙求解决
网上查资料有人说是SerialPort的bug问题,不知道是真的假的
...全文
577 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
katzel 2010-10-02
  • 打赏
  • 举报
回复
用过WINCC,没用过WINCE
tony0121 2010-10-02
  • 打赏
  • 举报
回复
遇到同样问题,现在比较郁闷,唯一想到的方法是在DataReceived事件中开关一次port
private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string temp = s_port.ReadExisting();
label1.BeginInvoke(new myDelegate(updateLabel));

if (s_port.IsOpen)//open port
s_port.Close();
//sense port
s_port.PortName = "COM3";
s_port.BaudRate = 115200;
s_port.Parity = System.IO.Ports.Parity.None;
s_port.DataBits = 8;
s_port.StopBits = System.IO.Ports.StopBits.One;

s_port.Open();
}
兔子-顾问 2010-05-26
  • 打赏
  • 举报
回复
不要再说pc上没问题……
请先将你的杯子倒空
否则所有的错误可能都将被掩盖,毕竟网络沟通很麻烦,我们需要多次确认才能找到问题根源,wince和pc有些机制不同,主要是ui方面。
兔子-顾问 2010-05-26
  • 打赏
  • 举报
回复
就你的代码而言,我只能说是猜测

//这句会不会因为字符编码及问题而出错?因为串口一般是ascii编码,很少用其他的编码,Encoding.Default是unicode
char[] cpara = System.Text.Encoding.Default.GetChars(chrdata);
//这行,你不如直接Encoding.Ascii.GetString()了
str = new String(cpara);
//你尝试吧这行注释掉。改为:
//File.Append方式,追加到文件中。看是否还是只执行1次。
this.BeginInvoke(new ReadScanData(OnReadScanData), str);



你这里的处理方式上,
1.不要再DataReceived事件中再次等待了。没有意义
2.如果要的是文本,你可以设置SerialPort对象的Encoding属性(如果有必要的话,不使用ascii的情况下,你设置,默认是Encoding.Ascii)
3.你一行就可以解决的,DataReceived事件中,只写一句:
this.BeginInvoke(OnReadScanData, spScanSerial.ReadExisting());
airskys 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyazhe 的回复:]

-_-

我知道了。我显然知道你的程序在wince才出问题。我做wince开发5年多了。设备很全。如果你代码是在大项目里的,就贴关键的部分,或是datareceived方法,往往这样的问题和ui界面有关。
[/Quote]
谢谢你的回复
airskys 2010-05-26
  • 打赏
  • 举报
回复
我用的是arm atmel 的9263cpu
串口也是三线的串口
airskys 2010-05-26
  • 打赏
  • 举报
回复

private void spReceive_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] chrdata=null;
int iLen ;
string str=null;
Thread.Sleep(100);
iLen =spScanSerial .BytesToRead;
if (iLen > 0)
{
chrdata = new byte[iLen];
spScanSerial.Read(chrdata, 0, iLen);
char[] cpara = System.Text.Encoding.Default.GetChars(chrdata);
str = new String(cpara);
this.BeginInvoke(new ReadScanData(OnReadScanData), str);
}
}



就是这段代码,在OnReadScanData里面我把str的值显示到界面上
但是只能显示一次,我用扫描枪再扫描的话这个事件就不会再触发
Joe-xXx 2010-05-25
  • 打赏
  • 举报
回复
MSDN查查SerialPort,先看看基础的吧
lexfu 2010-05-25
  • 打赏
  • 举报
回复
帮 顶
水哥阿乐 2010-05-25
  • 打赏
  • 举报
回复
帮 顶
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
-_-

我知道了。我显然知道你的程序在wince才出问题。我做wince开发5年多了。设备很全。如果你代码是在大项目里的,就贴关键的部分,或是datareceived方法,往往这样的问题和ui界面有关。
airskys 2010-05-25
  • 打赏
  • 举报
回复
谢谢你的回复
不过我的问题是DataReceived这个事件只会触发一次,等你读完数据后就不在被触发了
但是com的状态是连接的
这个是在wince下才有的
我在一般电脑里面是没有问题的

[Quote=引用 5 楼 wuyazhe 的回复:]

没写完的串口系列。你凑合看看1,2先
C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
[/Quote]
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
如果你调不好。可以发给我帮你看看。wuyazhe@yeah.net
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
serialport很多人说不好使,我也曾信以为真。用来3年了,05年到现在。哦。居然5年了。现在觉得蛮好的。
airskys 2010-05-25
  • 打赏
  • 举报
回复
不是基础的问题
是wince的问题
同样的程序在xp下一点问题都没有
内容概要:本文围绕【复现IEEE二区文献】基于状态空间表示与组件连接法的构网型逆变器统一小信号建模框架研究,提出了一种适用于多控制策略构网型逆变器的小信号建模方法。该方法结合状态空间建模理论与组件连接法(Component Connection Method),实现了对复杂逆变器系统动态特性的精确描述,尤其适用于分析系统在不同运行工况下的稳定性。通过Matlab代码实现,构建了包含控制环路、滤波器、锁相环等关键模块的完整小信号模型,并利用特征值分析与模态参与度评估系统稳定性,解决了传统建模方法在面对多时间尺度、强耦合非线性控制结构时建模困难、精度不足的问题。研究还探讨了关键控制参数对系统稳定边界的影响,为构网型逆变器的参数整定与优化设计提供了理论依据和技术支撑。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、微电网、电力系统稳定性研究的研究生、科研人员及工程技术人员,尤其适合致力于高水平期刊论文复现与仿真实践的科研工作者。; 使用场景及目标:① 掌握构网型逆变器统一小信号建模的核心方法,复现IEEE二区高水平文献成果;② 理解状态空间法与组件连接法在复杂电力电子系统建模中的集成应用;③ 利用Matlab进行特征值分析与稳定性判据研究,支撑科研仿真与论文写作;④ 为多逆变器并联系统、微电网稳定性分析等课题提供建模工具与技术路线参考。; 阅读建议:建议读者结合Matlab代码与文中建模流程逐步调试,重点关注各子模块状态方程的推导与系统整体矩阵组装过程,深入理解控制参数对系统极点分布的影响规律,建议配合其他稳定性分析案例进行对比学习以加深理解。
内容概要:WiFiSupply斯普莱WFS7000XB52AX5G是一款高性能、工业级的5G全网通+双频WIFI6无线AP基站,支持5G与工业大功率Wi-Fi链路无缝切换与带宽聚合,具备高达2974Mbps的双频带宽和1000Mbps以上的实际吞吐量。设备采用MIMO 4T4R架构,支持OFDMA、AI智能FastRoaming等先进技术,实现低至20ms的漫游切换延迟和超远传输距离(点对点桥接可达150公里以上)。产品具备IP68防水、-45~85℃宽温运行、多重看门狗、防浪涌、防静电等工业级防护设计,适用于复杂恶劣环境。支持胖瘦AP模式、多种认证与管理方式(含云平台、API接口),并集成丰富的网络安全与QoS功能,适用于智慧物流、工业4.0、巡检机器人、无人机、车载船舶等多种场景。; 适合人群:从事工业物联网、智能制造、自动化物流、智能交通等领域的网络工程师、系统集成商、设备制造商及技术决策人员。; 使用场景及目标:①实现移动设备(如AGV/AMR/巡检机器人)在高速移动中的零丢包、低延迟无线漫游;②在无固定网络覆盖区域构建高带宽、高可靠的远距离无线通信链路;③为5G与工业Wi-Fi双链路备份与聚合提供一体化解决方案,保障关键业务连续性;④在复杂电磁环境下实现稳定、安全的数据传输与远程控制。; 阅读建议:本产品技术参数详尽,建议结合具体应用场景重点关注其无线性能、漫游技术、供电方式与安装选项,并参考官方提供的管理平台与API接口文档进行系统集成与远程运维规划。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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