請問有關SPCOMM連接modem的問題 |
答題得分者是:flyup
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
小弟是使用BCB 5.0
而SPCOMM的設定與從COM送出的資料皆正確
但卻得不到modem的回應
小弟程式如下
char s[100];
int CR=13;
sprintf( s, "AT&D%c", CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
與
sprintf( s, "ATZ%c", CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
請問程式寫法是否正確,應如何修改才能與modem正在通訊與撥號
謝謝
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
//傳送命令給 Modem
void ModemCommand(string c)
{
string s; s="AT"+"Q0"+c+char(13);
SPcomm1.WriteCommData(s.c_str(),strlen(s.c_str())); ) //啟始 Modem
void InitialModem;
{
ModemCommand("&C1&D2X4S0=0M0"); ) //撥電話
void Dial(string PhoneNumber);
{
ModemCommand("DT"+PhoneNumber);
) 問題..希望不是最後才發生!建議一次問完! 發表人 - flyup 於 2003/02/24 10:22:42
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
小弟
SPCOMM的參數設定為
FLinkDetail.FComm->OnReceiveData = CommReceiveData;
FLinkDetail.FComm->CommName = com;
FLinkDetail.FComm->BaudRate = baudrate;
FLinkDetail.FComm->ByteSize = _8;
FLinkDetail.FComm->StopBits = _1;
FLinkDetail.FComm->Parity = Even;
FLinkDetail.FComm->ParityCheck = true;
FLinkDetail.FComm->Outx_XonXoffFlow = false;
FLinkDetail.FComm->Inx_XonXoffFlow = false;
FLinkDetail.FComm->StartComm();
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
程式如下 :
bool __fastcall modem_connect(AnsiString dial_no)
{
char s[100];
int connect_flag;
AnsiString recv_buf;
int CR=13;
DWORD tick; FormMain->TimerClock->Enabled = false ;
connect_flag = 0;
modem_ok=0 ; if( dial_no.c_str() == "") return false; use_modem = 1;
FLinkDetail.FBusyStatus = true;
sprintf( s, "ATZ%c", CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
if( FormDebug->Visible && FormDebug->MMLink->Checked)
{
FormDebug->Memo->Lines->Add( "Send modem Data");
FormDebug->ViewData( s, strlen(s));
} tick = GetTickCount();
while( LinkDetail.FBusyStatus)
{
Application->ProcessMessages();
if( GetTickCount() - tick > 5000) return false;
}
if( !modem_recv_check(0)) return false; FLinkDetail.FBusyStatus = true;
sprintf( s, "ATE0%c", CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
if( FormDebug->Visible && FormDebug->MMLink->Checked)
{
FormDebug->Memo->Lines->Add( "Send modem Data");
FormDebug->ViewData( s, strlen(s));
} tick = GetTickCount();
while( LinkDetail.FBusyStatus)
{
Application->ProcessMessages();
if( GetTickCount() - tick > 5000) return false;
}
if( !modem_recv_check(0)) return false; FLinkDetail.FBusyStatus = true;
// sprintf( s, "ATQ0&C1&D0X0S0=0M0%c", CR);
sprintf( s, "AT&D0X0&k0\Q0\X1%c", CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
if( FormDebug->Visible && FormDebug->MMLink->Checked)
{
FormDebug->Memo->Lines->Add( "Send modem Data");
FormDebug->ViewData( s, strlen(s));
} tick = GetTickCount();
while( LinkDetail.FBusyStatus)
{
Application->ProcessMessages();
if( GetTickCount() - tick > 5000) return false;
}
if( !modem_recv_check(0)) return false; FLinkDetail.FBusyStatus = true;
sprintf( s, "ATD%s%c", dial_no.c_str(),CR);
FLinkDetail.FComm->WriteCommData( s, strlen(s));
if( FormDebug->Visible && FormDebug->MMLink->Checked)
{
FormDebug->Memo->Lines->Add( "Send modem Data");
FormDebug->ViewData( s, strlen(s));
} tick = GetTickCount();
while( LinkDetail.FBusyStatus)
{
Application->ProcessMessages();
if( GetTickCount() - tick > 70000)
{
// sprintf(s,"timeout %ld",(GetTickCount() - tick));
// FormDebug->Memo->Lines->Add( s);
return false;
}
}
if( !modem_recv_check(1))
{ return false;
}
// 以上程式為modem 撥號連接
//以下為送出的字串
FLinkDetail.FSendBuf[0] = 0x01;
FLinkDetail.FSendBuf[1] = 0x0d;
FLinkDetail.FSendBuf[2] = 0x18;
FLinkDetail.FSendBuf[3] = 0x00;
FLinkDetail.FSendCnt = 4;
FLinkDetail.FComm->WriteCommData( FLinkDetail.FSendBuf, FLinkDetail.FSendCnt);
use_modem = 0;
modem_ok = 1;
return false;
然後對方用終端機去看只看到一個向上箭頭的符號而沒有4個byte
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
lin11112
初階會員 發表:42 回覆:83 積分:25 註冊:2003-02-17 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |