MScomm的Input和Output的问题,接收不到

dongchang 2007-08-01 12:36:06
高手请帮我看哈程序,在联机的时候怎么发送和接收都不行啊?


AnsiString SendData[8]= {"LLFT?","NUML?","TLFT?","NXTI?","ITIM?",
"IVAL1?", "INTN?","FVAL?"};
for(int i=0;i<8;i++)
{
MSComm1->Output=WideString(SendData[i]);
Delay(100);
RStr[i]=MSComm1->Input; //RStr[]接收的是数字
}
...全文
286 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sung2008 2008-04-24
  • 打赏
  • 举报
回复
流程:
(1)确认发文本还是二进制,使用InputMode设定;
(2)确顶通信机制,串口发的AnsiString后面一般要加"\r\n";
(3)可以设定串口flow触发条件,MScomm可以自己开启一个线程侦测是否受到数据.
我不懂电脑 2007-08-03
  • 打赏
  • 举报
回复
AnsiString要用文本模式发送。
i_love_pc 2007-08-03
  • 打赏
  • 举报
回复
不知道你的通信协议怎么写啊,你发送的是AnsiString数组,这个大小能确定吗?为什么不使用char数组的方式,要发送的字符串应该是固定的。

另外插入源代码不能自动排版,有点乱!
dongchang 2007-08-02
  • 打赏
  • 举报
回复
///////////////////////////////////////////
sendBuff...填充数据,可以采用内存拷贝的方式完成memcpy
/////////////////////////////////////////
请问这里怎么写啊,其实我早就找到这个例程了,就是在写这个的时候不会写,请赐教。回答对了立马给分!!!!

constantine 2007-08-02
  • 打赏
  • 举报
回复
发送能不能发对都已经是一个问题了。而且这样写代码也太奇怪了
i_love_pc 2007-08-02
  • 打赏
  • 举报
回复
//初始化串口控件参数
MSComm1->CommPort=1;//默认为com1口
MSComm1->OutBufferSize=1024;//输出缓冲区大小
MSComm1->InBufferSize=1024;//输入缓冲区大小
MSComm1->InputMode=1;//数据接收模式为二进制模式
MSComm1->Settings="4800,n,8,1";//设置参数,默认为:波特率4800;无校验;数据位8;停止位1

//打开串口
try
{
if(MSComm1->PortOpen)
return;
MSComm1->PortOpen=true;
}
catch(...)
{
MessageBox(NULL,"串口打开失败,请检查!","错误",MB_OK + MB_ICONERROR);
}

//关闭串口
try
{
if(MSComm1->PortOpen)
MSComm1->PortOpen=false;
}
catch(...)
{
MessageBox(NULL,"串口关闭失败,请检查!","错误",MB_OK + MB_ICONERROR);
}

//发送接收缓冲区定义
BYTE sendBuff[4];//发送命令数据缓冲区,大小根据实际情况而定
BYTE recvBuff[4];//返回命令数据缓冲区,大小根据实际情况而定
OleVariant ovSendBuf;//万能变量
OleVariant ovRecvBuf;//万能变量

//发送数据///////////////////////////////////////////////////////////////

sendBuff...填充数据,可以采用内存拷贝的方式完成memcpy

ovSendBuf=VarArrayCreate(OPENARRAY(int,(0,3)),varByte);//开辟万能变量数组空间
for(i=0;i<4;i++)//将发送数据填充入万能数组
{
ovSendBuf.PutElement(sendBuff[i],i);
}
MSComm1->Output=ovSendBuf;
////////////////////////////////////////////////////////////////////////


//接收数据///////////////////////////////////////////////////////////////
ovRecvBuf=MSComm1->Input;
for(i=0;i<4;i++)//从万能数组中提取接收数据到缓冲区
{
recvBuff[i]=ovRecvBuf.GetElement(i);
}
////////////////////////////////////////////////////////////////////////

hcat1999 2007-08-02
  • 打赏
  • 举报
回复
测试帖 代码测试,不要给我分阿

//初始化串口控件参数 
MSComm1- >CommPort=1;//默认为com1口
MSComm1- >OutBufferSize=1024;//输出缓冲区大小
MSComm1- >InBufferSize=1024;//输入缓冲区大小
MSComm1- >InputMode=1;//数据接收模式为二进制模式
MSComm1- >Settings="4800,n,8,1";//设置参数,默认为:波特率4800;无校验;数据位8;停止位1

//打开串口
try
{
if(MSComm1- >PortOpen)
return;
MSComm1- >PortOpen=true;
}
catch(...)
{
MessageBox(NULL,"串口打开失败,请检查!","错误",MB_OK + MB_ICONERROR);
}

//关闭串口
try
{
if(MSComm1- >PortOpen)
MSComm1- >PortOpen=false;
}
catch(...)
{
MessageBox(NULL,"串口关闭失败,请检查!","错误",MB_OK + MB_ICONERROR);
}

//发送接收缓冲区定义
BYTE sendBuff[4];//发送命令数据缓冲区,大小根据实际情况而定
BYTE recvBuff[4];//返回命令数据缓冲区,大小根据实际情况而定
OleVariant ovSendBuf;//万能变量
OleVariant ovRecvBuf;//万能变量

//发送数据///////////////////////////////////////////////////////////////

sendBuff...填充数据,可以采用内存拷贝的方式完成memcpy

ovSendBuf=VarArrayCreate(OPENARRAY(int,(0,3)),varByte);//开辟万能变量数组空间
for(i=0;i <4;i++)//将发送数据填充入万能数组
{
ovSendBuf.PutElement(sendBuff[i],i);
}
MSComm1- >Output=ovSendBuf;
////////////////////////////////////////////////////////////////////////


//接收数据///////////////////////////////////////////////////////////////
ovRecvBuf=MSComm1- >Input;
for(i=0;i <4;i++)//从万能数组中提取接收数据到缓冲区
{
recvBuff[i]=ovRecvBuf.GetElement(i);
}
////////////////////////////////////////////////////////////////////////
i_love_pc 2007-08-01
  • 打赏
  • 举报
回复
自发自收吗?
确定串口的参数设置正确,尤其是InputMode
dongchang 2007-08-01
  • 打赏
  • 举报
回复
我是把命令发送到仪器中,仪器在返回值到客户机,不知道这样是不是要用到OnComm事件,具体怎么做还请高手指点一下,给出例子最好,谢谢!!

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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