vc中用serialport类实现串口通信时,连续的发送多次命令后,再次发送数据失败 急!!!!!!!!!!!

yanshangfei 2010-08-02 12:42:57
如题

我的命令是EF 30 s m 00 00 00 FE s,m代表16进制数
再 我连续多次发送这样的命令(接受数据正常)后,再发送 EF 80 00 00 00 00 00 FE后,数据发送不下去
单步跟踪
void CSerialPort::WriteToPort(char* string)
{
assert(m_hComm != 0);

memset(m_szWriteBuffer, 0, sizeof(m_szWriteBuffer));
strcpy(m_szWriteBuffer, string);
m_nWriteSize=strlen(string);

// set event for write
SetEvent(m_hWriteEvent);
}

按程序设计,应该进入UINT CSerialPort::CommThread(LPVOID pParam)这个函数中,
但是我在函数中设置断点根本就不进入


请各位大虾帮忙解决下
...全文
156 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanshangfei 2010-08-02
自己顶下 都沉了 没人应了
回复
yanshangfei 2010-08-02
好有就是 当我早80命令后在写个MessageBox 执行完后,80就又发出去了
奇怪啊 大虾啊 块帮帮忙吧!!
程序都写完了 可是在这出毛病了
急啊!!!!!!!!!!!!
回复
yanshangfei 2010-08-02
后面还继续发送数据 又有效啊
我的其他命令里也有00的 都是有效的
用serialport类做的串口调试工具 发什么都有效 只是不是连续切换命令发送的

回复
tianhede 2010-08-02
线程是不是退出了
回复
zxdlms 2010-08-02
CommThread,看看你这个函数是不是连续多次发送命令出错,造成线程结束了。
回复
flight9 2010-08-02
WriteToPort(char* string)有个隐含要求:你发的这串字符必须没有00

因为一旦中间有00, m_nWriteSize=strlen(string)得到是你00之前字符数而不管你后面还有

所以你这样发出的很可能是错误的字节数,下位机不会接收. 碰到过类似问题的说
回复
发动态
发帖子
硬件/系统
创建于2007-09-28

2589

社区成员

VC/MFC 硬件/系统
申请成为版主
社区公告
暂无公告