用COM2实现通信控制出现的问题,请指教!!!

lcjfy 2002-08-24 10:54:48
我正在写一段通信控制的程序,根据设备方提供的通信协议,用RS232进行通信控制。
我从网上下载了一个样板程序,在上面做了一点改动,结果没有一点反应。请大家指教,小弟不胜感激。谢谢!(我在线等待!!!)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
//取得要打开的通信端口
Temp = "COM2";
//转换至指针类型Char
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;
}
//通信协议上标明:1个起始位,接着5个数据位,接着1个结束位,然后是校验位(5个数据位之和)
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::Button3Click(TObject *Sender)
{

//下面是根据协议的控制命令,这样表示对吗??????
char SendData[8]={{'0xa0'},{'0x01'},{'0x02'},{'0x00'},{'0x00'},{'0x21'},{'0xaf'},{'0x24'}};
//-------------------
int ln;
unsigned long lrc,BS;
if (hComm1==0) return; //检查Handle值

BS = StrLen(SendData); //取得字符串长度
//实际的发送动作
WriteFile(hComm1,SendData,BS, &lrc,NULL); // 送出数据
}
...全文
53 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcjfy 2002-08-25
  • 打赏
  • 举报
回复

改为:
char SendData[8]={0xa0,0x01,0x02,0x00,0x00,0x21,0xaf,0x24};
后出来了三个数:
A0 1 2
怎么回事?
lcjfy 2002-08-24
  • 打赏
  • 举报
回复
结果出现了怪事,能够正确发送接收字符串,却不能正确发送char型数组!!!
表现为:比如
char SendData[8]={{'0xa0'},{'0x01'},{'0x02'},{'0x00'},{'0x00'},{'0x21'},{'0xaf'},{'0x24'}};
在数据传出去之前,SendData就变成了“012001f4”即数组中每个元素的末位。怎么回事?
请指教!!!
xlander 2002-08-24
  • 打赏
  • 举报
回复
好像有点问题:
strlen()似乎认为0,是字符串的结尾,所以,你的程序里发送了3个字符,而不是8各

4,390

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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