MFC 写AT指令有关问题
MFC 写AT指令问题
所要实现的功能: 向手机号为13734608118中发送两条命令 一条是字符0000 一条是一个号码为01234567890 的手机号 并且设置短消息到达自动提示
出现的问题: 在ReadComm的时候机器就死了,我的写的代码有好多的地方是不完善的能否指点一下。
代码:
void CDlgInfo1::OnButton()
{
// TODO: Add your control notification handler code here
BOOL ComB;
//打开串口
ComB=OpenSendComm();
if (!ComB)
{
return;
}
//初始MODERN并发送信息
if (!gsmInit())
{
return ;
}
CloseHandle(portID);
}
BOOL CDlgInfo1::OpenSendComm()
{
char sIni[2000];
ComVcFunction::GetCurDir(sIni);
strcat(sIni,"\\setup.ini");
int SENDCOM=GetPrivateProfileInt("SYS","SENDCOM",2,sIni);
SENDCOM=(SENDCOM==0)?2:SENDCOM;
wsprintf( ComName, "COM%d", SENDCOM );
portID = CreateFile( ComName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
if(portID == INVALID_HANDLE_VALUE)
{
return FALSE;
}
return TRUE;
}
BOOL CDlgInfo1::gsmInit()
{
char ans[128]; // 应答串
// 测试GSM-MODEM的存在性
WriteComm("AT\r", 3);
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return FALSE;
// 关闭回显
WriteComm("ATE0\r", 5);
ReadComm(ans, 128);
// TXT模式
WriteComm("AT+CMGF=1\r", 10);
ReadComm(ans, 128);
// 设置对方号码
WriteComm("AT+CMGS=<13734608118>\r", 20);
//要发送的内容
WriteComm("AT+IDNT=0000\r", 13);
WriteComm("AT+PHON=11111111111\r", 20);
//设置短消息到达自动提示
WriteComm("AT+CNMI=1,1,0,0,1()\r", 13);
return TRUE;
}
int CDlgInfoXiangbian::WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度
WriteFile(portID, pData, (DWORD)nLength, &dwNumWrite, NULL);
return (int)dwNumWrite;
}
// 读串口
// 输入: pData - 待读的数据缓冲区指针
// nLength - 待读的最大数据长度
// 返回: 实际读出的数据长度
int CDlgInfoXiangbian::ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度
ReadFile(portID, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
------解决方案--------------------
SetCommTimeouts() //设置串口超时
所要实现的功能: 向手机号为13734608118中发送两条命令 一条是字符0000 一条是一个号码为01234567890 的手机号 并且设置短消息到达自动提示
出现的问题: 在ReadComm的时候机器就死了,我的写的代码有好多的地方是不完善的能否指点一下。
代码:
void CDlgInfo1::OnButton()
{
// TODO: Add your control notification handler code here
BOOL ComB;
//打开串口
ComB=OpenSendComm();
if (!ComB)
{
return;
}
//初始MODERN并发送信息
if (!gsmInit())
{
return ;
}
CloseHandle(portID);
}
BOOL CDlgInfo1::OpenSendComm()
{
char sIni[2000];
ComVcFunction::GetCurDir(sIni);
strcat(sIni,"\\setup.ini");
int SENDCOM=GetPrivateProfileInt("SYS","SENDCOM",2,sIni);
SENDCOM=(SENDCOM==0)?2:SENDCOM;
wsprintf( ComName, "COM%d", SENDCOM );
portID = CreateFile( ComName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
if(portID == INVALID_HANDLE_VALUE)
{
return FALSE;
}
return TRUE;
}
BOOL CDlgInfo1::gsmInit()
{
char ans[128]; // 应答串
// 测试GSM-MODEM的存在性
WriteComm("AT\r", 3);
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return FALSE;
// 关闭回显
WriteComm("ATE0\r", 5);
ReadComm(ans, 128);
// TXT模式
WriteComm("AT+CMGF=1\r", 10);
ReadComm(ans, 128);
// 设置对方号码
WriteComm("AT+CMGS=<13734608118>\r", 20);
//要发送的内容
WriteComm("AT+IDNT=0000\r", 13);
WriteComm("AT+PHON=11111111111\r", 20);
//设置短消息到达自动提示
WriteComm("AT+CNMI=1,1,0,0,1()\r", 13);
return TRUE;
}
int CDlgInfoXiangbian::WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度
WriteFile(portID, pData, (DWORD)nLength, &dwNumWrite, NULL);
return (int)dwNumWrite;
}
// 读串口
// 输入: pData - 待读的数据缓冲区指针
// nLength - 待读的最大数据长度
// 返回: 实际读出的数据长度
int CDlgInfoXiangbian::ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度
ReadFile(portID, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
------解决方案--------------------
SetCommTimeouts() //设置串口超时