串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的

串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的,第1张

按你所说能进if 证明判断是有数据

你用%c输出是有限制的 很可能是乱码,所以你以为是没数据

你用这2句试试

byte bt=(char)(rxdata+k); //字符型

strtempFormat("%02X ",bt);将字符送入临时变量strtemp存放

再善意的提醒下,你最好不要用else的语句,因为接受一条数据可能经过几次if才收到,而多半时间是没有数据的

以下是一段 我自己用的接收处理代码其中的sp是已经声明好的SERIPORT。

spDataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);

//接收串口数据字符串

string watcher = null,send=null;

//串口数据接收事件

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

watcher += spReadExisting();//这句就是接收内容代码,如果只需要接收后面就都不需要了。

{

if (watcherLength % 8 == 0)

{

send = watcher;

switch (watcher)

{

case "I(001,1)":

//dt1Tag = "0";

if(dt1Tag=="0")

{

sign = "d__auto";

dt1IsEnabled = true;

dt_streamwriteIsEnabled = true;

}

//sign = "d__auto";

//dt1IsEnabled = true;

break;

case "I(001,0)":

sign = "d__auto";

spWriteLine("O(01,000,0)");

dt_streamwriteIsEnabled = true;

dt1IsEnabled = false;

break;

case "I(002,1)":

//dt2Tag = "0";

if (dt2Tag == "0")

{

sign = "d__auto";

dt2IsEnabled = true;

dt_streamwriteIsEnabled = true;

}

break;

case "I(002,0)":

sign = "d__auto";

spWriteLine("O(02,000,0)");

dt2IsEnabled = false;

dt_streamwriteIsEnabled = true;

break;

case "I(003,1)":

//dt3Tag = "0";

if (dt3Tag == "0")

{

sign = "d__auto";

dt3IsEnabled = true;

dt_streamwriteIsEnabled = true;

}

break;

case "I(003,0)":

sign = "d__auto";

spWriteLine("O(03,000,0)");

dt3IsEnabled = false;

dt_streamwriteIsEnabled = true;

break;

case "I(004,1)":

//dt4Tag = "0";

if (dt4Tag == "0")

{

sign = "d__auto";

dt4IsEnabled = true;

dt_streamwriteIsEnabled = true;

}

break;

case "I(004,0)":

sign = "d__auto";

spWriteLine("O(04,000,0)");

dt4IsEnabled = false;

dt_streamwriteIsEnabled = true;

break;

case "I(005,1)":

//dt5Tag = "0";

if (dt5Tag == "0")

{

sign = "d__auto";

dt5IsEnabled = true;

dt_streamwriteIsEnabled = true;

}

break;

case "I(005,0)":

sign = "d__auto";

spWriteLine("O(05,000,0)");

dt5IsEnabled = false;

dt_streamwriteIsEnabled = true;

break;

case "I(006,1)":

sign = "d__auto";

dt1Tag = "1";

dt1IsEnabled = false;

dt_streamwriteIsEnabled = true;

break;

case "I(006,0)":

sign = "d__auto";

dt1Tag = "0";

dt_streamwriteIsEnabled = true;

break;

case "I(007,1)":

sign = "d__auto";

dt2IsEnabled = false;

dt_streamwriteIsEnabled = true;

dt2Tag = "1";

break;

case "I(007,0)":

sign = "d__auto";

dt2Tag = "0";

dt_streamwriteIsEnabled = true;

break;

case "I(008,1)":

sign = "d__auto";

dt3IsEnabled = false;

dt_streamwriteIsEnabled = true;

dt3Tag = "1";

break;

case "I(008,0)":

sign = "d__auto";

dt3Tag = "0";

dt_streamwriteIsEnabled = true;

break;

case "I(009,1)":

sign = "d__auto";

; dt_streamwriteIsEnabled = true;

dt4IsEnabled = false;

dt4Tag = "1";

break;

case "I(009,0)":

sign = "d__auto";

dt4Tag = "0";

dt_streamwriteIsEnabled = true;

break;

case "I(010,1)":

sign = "d__auto";

dt5IsEnabled = false;

dt_streamwriteIsEnabled = true;

dt5Tag = "1";

break;

case "I(010,0)":

sign = "d__auto";

dt5Tag = "0";

dt_streamwriteIsEnabled = true;

break;

}

watcher = null;

}

}

}

以上就是关于串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的全部的内容,包括:串口助手能接收到数据,但自己用c++编的程序不能,程序如下,是基于MSComm控件的、windows 应用程序 中的DataReceived事件怎么写啊我想获取串口的数据,接收数据那块不会写。。。 谢、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10642507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存