事情的經過是這樣的:剛剛學著用了點MFC,然后讓我寫一個串口程式驅動個馬達,當然,有個驅動卡了。
利用modbus Rs485通訊,連接驅動的線是RS232轉RS485的,連在USb介面上。
手上有除錯助手N個,下了源代碼無數,可是一個能用VS2015編譯出來的一個沒有,都是以前的老版本寫的,這一點對MFC無力
吐槽,剛剛入行不久,能力實在有限,改不了。得,那就自己寫。結果基本如下代碼所示,連接除錯助手,發送指令毫無壓力,
但是連接驅動卡后,指令一發送驅動卡就GG,經過研究很有可能是串口引數設定問題,一改再改,無能無力!
特來求助!
ps:深感任重而道遠!!
/*********按鈕觸發程式*********/
bool CMy0902PortDlg::OpenIo()
{
byte _Command[ ]= { 0x01,0x06,0x00,0x7D,0x40,0x00,0x28,0x12 };
HMcom.OpenSerial(2, 115200);
HMcom.Write(_Command, 8);
return TRUE;
}
/****************************************/
/***********一部分呼叫函式************/
/****************************************/
bool CMyCom::OpenSerial(DWORD dwPort, DWORD dwBaudRate)
{
m_Port = dwPort;
return Open(dwPort,dwBaudRate);
}
/***********************打開串口********************/
bool Open(DWORD dwPort, DWORD dwBaudRate)
{
if (dwPort < 1 || dwPort > 1024)return false;
BindCommPort(dwPort);
if (!OpenCommPort())return false;
if (!SetupPort())return false;
return SetState(dwBaudRate);
}
/*******************設定串口*******************/
virtual bool SetupPort()
{
if (!IsOpen())return false;
if (!::SetupComm(_hCommHandle, 4096, 4096))return false;
if (!::GetCommTimeouts(_hCommHandle, &_CO))return false;
_CO.ReadIntervalTimeout = 0;
_CO.ReadTotalTimeoutMultiplier = 1;
_CO.ReadTotalTimeoutConstant = 1000;
_CO.WriteTotalTimeoutMultiplier = 1;
_CO.WriteTotalTimeoutConstant = 1000;
if (!::SetCommTimeouts(_hCommHandle, &_CO))return false;
if (!::PurgeComm(_hCommHandle, PURGE_TXABORT | PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR))
return false;
return true;
}
/***********************分割***********************/
bool SetState(DWORD dwBaudRate, DWORD dwByteSize = 8, DWORD dwParity =
NOPARITY, DWORD dwStopBits = ONESTOPBIT)
{
if (IsOpen())
{
if (::GetCommState(_hCommHandle, &_DCB) != TRUE)
return false;
_DCB.BaudRate = dwBaudRate;
_DCB.ByteSize = (unsigned char)dwByteSize;
_DCB.Parity = (unsigned char)dwParity;
_DCB.StopBits = (unsigned char)dwStopBits;
return ::SetCommState(_hCommHandle, &_DCB) == TRUE;
}
return false;
}
uj5u.com熱心網友回復:
驗證碼輸了八次!!!!這很12306.uj5u.com熱心網友回復:
使用單步除錯,使用串口抓包軟體uj5u.com熱心網友回復:
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl先下載安裝MSDN98,
再參考:
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DSP
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RES
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.RC
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\MAKEFILE
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\VERSION.H
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\RESOURCE.H
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.H
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.C
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\README.TXT
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.ICO
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.BMP
MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\SERIAL\TTY.DEF
uj5u.com熱心網友回復:
這已經是我單步的第二天了,供應商居然還沒demo,很無奈
uj5u.com熱心網友回復:
MSDN98?2015都看不懂···············
還這么多··
i am dead(手動圖片)
uj5u.com熱心網友回復:
那樓主還是趁早改行吧。我建議。
uj5u.com熱心網友回復:
改行學C#吧

以前學MFC,現在轉C#的路過
uj5u.com熱心網友回復:
之前用MFC什么也搞不定,現在用C#,網上下載示例,稍微改改就能用了。學C說多了都是淚,書買了一大堆,還沒入門。C#跟著同事做了個專案,居然用的比C++熟練uj5u.com熱心網友回復:
找個標準的串口程式測驗一下你的驅動程式,看看能否正常驅動設備。比如用Windows自帶的串口工具~uj5u.com熱心網友回復:
既然連接除錯助手,發送指令毫無壓力,那么說明通信沒有問題,問題出在你的驅動板上,會GG(不知道GG是啥)說明的驅動有問題轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/123984.html
標籤:基礎類
