[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void CMyPortDlg:Init()
{
这里里面做m_ComPort;初始化的操作主要为:
m_ComPort.SetCommPort(1); //选择COM1
m_ComPort.SetInBufferSize(1024); //接收缓冲区
m_ComPort.SetOutBufferSize(1024);//发送缓冲区
m_ComPort.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_ComPort.SetInputMode(1);//以二进制方式读写数据
m_ComPort.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_ComPort.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
….
…
}
void CMyPortDlg:Send(CString strData)
{
这个里面把参数strData传进来的字符 转换成16进制数据,通过串口发出去
}
BEGIN_EVENTSINK_MAP(CSportDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CSportDlg)
ON_EVENT(CMyPortDlg, IDC_MSCOMM1, 1 /* OnComm */, OnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CMyPortDlg::OnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant1;
COleSafeArray safearray;
LONG len,k;
if(m_ComPort.GetCommEvent()==2)
{
variant1 = m_ComPort.GetInput();
safearray = variant1;
len = safearray.GetOneDimSize();
for(k=0;k<len;k++)
{
safearray.GetElement(&k,rxdata+k);
}
然后再简单的分析数据,几行代码;
}
}
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
UINT CProduceDlg::MyThread1(void *param)
{
CMyPortDlg * Dlg =(CMyPortDlg *)param;
…
…
}
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
UINT CProduceDlg::MyThread1(void *param)
{
CMyPortDlg * Dlg =(CMyPortDlg *)param;
Dlg->Send("FFAAAAFF"); //发送启动命令
Sleep(5000); //这里延迟5秒 ,并且让主窗口线程响应ON_EVENT事件
Dlg->Send("FF0000FF"); //发送关闭命令
Sleep(500); //这里延迟一下,也让主窗口响应ON_EVENT
Dlg->Send("FFBBBBFF"); //发送查询命令
Sleep(1000); //延迟1秒,留出足够的时间让下位机返回数据
然后操作rxdata[]里面的数据
}
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
UINT CProduceDlg::MyThread1(void *param)
{
CMyPortDlg * Dlg =(CMyPortDlg *)param;
Dlg->Send("FFAAAAFF"); //发送启动命令
pMyThread->SuspendThread() //把线程挂起 然后在 OnComm里面判断收到足够数据就恢复
…
..
}