一个Pcomm串口问题

alpha704 2007-08-10 10:50:29
//打开串口
bool OpenPort(int Port)
{
int ret;

ret = sio_open(Port);
if (ret != SIO_OK) return(false);
sio_DTR(Port,0); //关闭DTR状态
sio_RTS(Port,0); //关闭RTS状态
sio_flush(Port,2); //清空输入输出缓冲区 0是输入 1是输出 2是输入输出
ret = sio_ioctl(Port,B9600,P_NONE|BIT_8|STOP_1);
if (ret != SIO_OK)
{
sio_close(Port);
return(false);
}
else
return(true);
}
//------------------------------------------------------------------------------
//关闭串口
bool ClosePort(int Port)
{
sio_close(Port);
return(true); //正常返回
}
//------------------------------------------------------------------------------

//以下为输出函数
//下载数据
bool MachineOnline(int Port,int MNumber)
{
unsigned char SendData[3];
unsigned char ReceiveData[3];
int CRC;
int ret;

SendData[0] = 0xF0;
SendData[1] = MNumber;
SendData[2] = 0xFE;
CRC = (SendData[0] + SendData[1]) % 256;
SendData[3] = CRC;

if(!OpenPort(Port)) return(false);

sio_write(Port,SendData,sizeof(SendData)+1);
Sleep(100);
ret = sio_iqueue(Port);
if(ret==4)
{
sio_read(Port,ReceiveData,4);
for(int i=0;i<4;i++)
{
if(ReceiveData[i] != SendData[i])
{
ClosePort(Port);
return(false);
}
}
}
return(ClosePort(Port));
}
//------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(MachineOnline(1,0))
ShowMessage("在线!");
else
ShowMessage("不在线!");
}
//---------------------------------------------------------------------------


程序如上,错误如图
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_love_pc 2007-08-10
  • 打赏
  • 举报
回复
接分!
alpha704 2007-08-10
  • 打赏
  • 举报
回复
问题解决了,把ShowMessage改成MessageBox就行了。不过为什么就不知道了。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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