奇怪?!数据到哪里去了?!求救!!!!!

lcjfy 2002-08-25 09:30:22

我正在写一段通信控制的程序,根据设备方提供的通信协议,用RS232进行通信控制。
我从网上下载了一个样板程序,在上面做了一点改动,结果出现了怪事,能够正确发送接收字符串,却不能正确发送char型数组!!!

我把发送和接收的程序都发过来。请指教!!!

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
Temp = "COM1";
ComNo = Temp.c_str();
hComm1 = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm1 == INVALID_HANDLE_VALUE)
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}
GetCommState(hComm1,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity =NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
if (!SetCommState(hComm1, &dcb))
{
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm1);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
Temp = "COM2";
ComNo = Temp.c_str();
hComm2 = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm2 == INVALID_HANDLE_VALUE) // 如果通信端口未打开
{
MessageBox(0, "打开通信端口错误!!","Comm Error",MB_OK);
return;
}

GetCommState(hComm2,&dcb); // 得知目前通信端口的状态
dcb.BaudRate = CBR_9600; // 设置波特率为9600
dcb.ByteSize = 8; // 字节为 8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个Stop bit
if (!SetCommState(hComm2, &dcb)) { // 设置通信端口的状态
MessageBox (0, "通信端口设置错误!!!","Set Error",MB_OK);
CloseHandle(hComm2);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
String Temp;
char SendData[8]={0xa0,0x01,0x02,0x00,0x00,0x20,0xaf,0x23};
int ln;
unsigned long lrc,BS;
if (hComm1==0) return; //检查Handle值
BS = StrLen(SendData
WriteFile(hComm1,&SendData,BS, &lrc,NULL); // 送出数据
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
String Temp;
char inbuff[1024];
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;

ClearCommError(hComm2,&dwError,&cs);
if (cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm2, PURGE_RXCLEAR); // 清除通信端口数据
return;
}
ReadFile(hComm2, inbuff,cs.cbInQue,&nBytesRead,NULL);
inbuff[cs.cbInQue]= '\0';

AnsiString strTemp,strResult;
strResult = "";
for(int i=0;i<cs.cbInQue;i++)
{
strTemp.sprintf("%2X ",inbuff[i]);
strResult+=strTemp;
}

//还原为16进制显示。
Memo2->Text = strResult;
}
//-------


只出来了3个数:A0 1 2
问题在哪里?

...全文
37 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcjfy 2002-08-25
  • 打赏
  • 举报
回复
好的,谢谢!我回去看看!!!
flyhuang 2002-08-25
  • 打赏
  • 举报
回复
SendData[8]={0xa0,0x01,0x02,0x00,0x00,0x20,0xaf,0x23}

这个字符数组的第四个元素值等于0
然后你用
BS = StrLen(SendData) //这个BS求的值便等于3了
当然只发了三个数字

改一下
将 BS=8然后发送试试
sxslyy 2002-08-25
  • 打赏
  • 举报
回复
gz

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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