上位机和下位机通信,上位机先发0x3A,下位机收到0x3A后,回送0xA3,上位机收到0xA3后,接收下位机发送的256个字节的数据,之后下位机发送0x33,作为结束符,我用的mscomm控件,怎么编写这段代码呢?尤其是不知怎么握手?请高手指导呀
解决方案 »
- 求助高手解决视频压缩的问题
- PC有串口、但不连串口设备能成功发送串口指令么?
- 在MFC中怎样获取当前程序所在的绝对路径?
- CFile,CArchive里有些地方不太明白,求教!
- 如何在局域网中 不用在其他在线机器上安装木马程序就可以访问其他机器的磁盘内容(里面还有详细说明)
- 请问如何相应“CListView”中某个item被双击的事件???
- 菜鸟提问:为何我看不懂<VC++技术内幕>
- 请zwvista(球迷程序员)领分,关于属性单加最小化按钮你说得没错,是我粗心了
- 在几个类之间传送自定义的结构,具体方案,可以当天结贴!!!
- GetRValue函数应该得到的是int型
- 牙疼,吃饭吃到骨头啦!!散分!!
- "物理地址扩展"是什么意思?怎么去掉?
http://www.gjwtech.com/vcandc/scommassistantcode.htm
http://www.gjwtech.com/scomm/scmfcactivex.htm
http://www.gjwtech.com/scomm/scmfcprogramfujie.htm
CString csBaud;
m_ComPort.SetCommPort(CommNO);//CommNO是几自己设定
m_ComPort. SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
m_ComPort. SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes if( m_ComPort.GetPortOpen() )
MessageBox("该串口已经打开", "系统提示");
else
{
m_ComPort.SetPortOpen(TRUE);
csBaud.Format("%d", Baud); //波特率是几自己设
csBaud += ",n,8,1";
m_ComPort.SetSettings(csBaud);
m_ComPort.SetInputMode(1);
m_ComPort.SetRThreshold(1);
m_ComPort.SetInputLen(0);
m_ComPort.GetInput();
}
CByteArray array;
m_ComPort.SetOutput(COleVariant(array));//array内容自己添,用法文章上有接收:void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
if(m_ctrlHexDisplay.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}