求助:MScomm串口控件通信问题!

goaheadcai 2017-09-24 05:17:06
一直是编底层、下位机程序的,学习C++ Builder的串口编程。用的MScomm串口控件发送消息,如下:
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_SendClick(TObject *Sender) //按钮发送
{
int i;
int iSendCnt; //发送包的字节数
OleVariant send;
//AnsiString str;
// char *buff;

int pc_send[5] = {0x01,0x31,0x00,0x35,0x9B}; //PC发出的数据包
send = VarArrayCreate(OPENARRAY(int, (0, 5-1)), varByte); //创建一个动态数组
for(i = 0; i < 5; i++)
{
send.PutElement(pc_send[i], i); //填充待发送的数据元素
}
MSComm1->Output = send;//从串口发送
}
1、这个程序是可以发送的,但是有个问题:如果pc_send[5]数值中有0x00,下位机接什么回什么,返回显
示0x00没有了,不知道是上位机没发出去,还是下位机没接收到?
2、另外,只要pc_send[5]数组元素都是>0的,都可以正常返回,用其它串口软件测试下位机,也是正常的。
由此判断,上位机没发出去!!难道“send.PutElement(pc_send[i], i); //填充待发送的数据元素”,这个有问题?
...全文
479 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCBPLC 2018-04-26
  • 打赏
  • 举报
回复
我用串口MSCOMM 编过小项目,是用事件读取的 void __fastcall TForm1::MSComm1Comm(TObject *Sender) { // 串口采用异步通迅,不同的端口可同时按收---------------------------------------- TMSComm *mscomm1=(TMSComm *)Sender; int port=mscomm1->CommPort; TChannel * c=Channels[port]; OleVariant buf0=mscomm1->Input; if (!c->isIdle) { BYTE *buf1=c->buf; int cn=buf0.ArrayHighBound()+1; for (int i=0;i<cn;i++) buf1[c->bufLen++]=buf0.GetElement(i); if (c->chCount!=0 && c->bufLen>=c->chCount) { // 置点的状态 c->bufLen=c->chCount; Points[c->pointIdx]->dataStat=3; // 完成,可以处理了 Points[c->pointIdx]->dataLen=c->bufLen; Points[c->pointIdx]->dataTick1=GetTickCount(); c->isIdle=true; // 释放通道 } } }
ccrun.com 2017-09-25
  • 打赏
  • 举报
回复
做串口通讯程序,建议你安装一个Eltima出品Serial Port Monitor,用来监控和模拟串口收发数据。观察一下上位机发出的数据到底是不是你预期的,然后再分析。

1,316

社区成员

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

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