全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2240
推到 Plurk!
推到 Facebook!

請問有關SPCOMM連接modem的問題

答題得分者是:flyup
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-24 09:40:06 IP:211.20.xxx.xxx 未訂閱
小弟是使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-24 10:06:27 IP:61.217.xxx.xxx 未訂閱
//傳送命令給 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-24 10:26:45 IP:211.20.xxx.xxx 未訂閱
flyup大大 : 小弟依照以下定義 string s; s="AT" "Q0" c char(13); 但BCB卻回應 [c error] : e2129 character constant must be one or two characters long
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-24 10:35:08 IP:61.217.xxx.xxx 未訂閱
請自行轉成 bcb 語法    問題..希望不是最後才發生!建議一次問完!
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-24 10:46:41 IP:211.20.xxx.xxx 未訂閱
小弟已將InitModem字串送出 但仍得不到modem回應 請問是否在init SPCOMM時有何要注意的
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-24 10:52:31 IP:61.217.xxx.xxx 未訂閱
不曉得你要什麼回應 可否詳述    問題..希望不是最後才發生!建議一次問完!
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-24 11:03:50 IP:211.20.xxx.xxx 未訂閱
小弟 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-24 11:26:45 IP:61.217.xxx.xxx 未訂閱
俺是說 不曉得你要"modem" 什麼回應 可否詳述 請將 用途 & 須要那些功能 & 須要那些modem 回應     請一次講清楚,俺才能幫你 解決    問題..希望不是最後才發生!建議一次問完!
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-24 11:38:10 IP:211.20.xxx.xxx 未訂閱
小弟是要用modem與另一設備上的modem連接 而另一設備modem已設定為自動接聽模式 而modem連上後要做資料的傳送與回應對方的要求
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-24 11:50:07 IP:61.217.xxx.xxx 未訂閱
請先參考下列幾篇,若有問題再提出    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24669    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24303    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25292        問題..希望不是最後才發生!建議一次問完!
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-25 16:04:10 IP:211.20.xxx.xxx 未訂閱
再請教大大 小弟已經將Modem connect上了 設定為19200,N,8,1 對方也已回應connect 但為何小弟要送出一串binary字串 如 0x01 0x0d 0x0c 但對方都收不到送出的字串 請問要如何修改才能正確???
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-25 16:16:39 IP:61.217.xxx.xxx 未訂閱
請將 你 所說的這一段程式碼 貼上來    
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-02-25 16:51:15 IP:211.20.xxx.xxx 未訂閱
程式如下 : 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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-02-25 17:05:15 IP:61.217.xxx.xxx 未訂閱
你所傳送的碼 在終端機當然看不到    對應到 ascll code 是無符號的         
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-02-25 17:16:11 IP:211.20.xxx.xxx 未訂閱
小弟有試著用其他data scope來抓取所傳送的資料 也一樣會得到不到4個byte的資料
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-02-25 17:22:56 IP:61.216.xxx.xxx 未訂閱
先傳字串 try try see    加油 加油    
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-02-25 17:33:00 IP:211.20.xxx.xxx 未訂閱
傳一般ASCII字串都正常 但我需傳binary字串
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-02-25 19:44:21 IP:61.225.xxx.xxx 未訂閱
如果你是要顯示 "0x1 0xd 0x18 0x00"  請鬖考下列    char s[100];    sprintf(s,"0x%x 0x%x 0x%x 0x%x",0x01,0x0d,0x18,0x00 ); FLinkDetail.FComm->WriteCommData( s, strlen(s));        
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-02-26 15:08:59 IP:211.20.xxx.xxx 未訂閱
目前資料已經可從modem傳出而另一端也能接收到 但請問大大 如何設定modem讓傳送出到接受後 各byte間的時間能夠相近而不會有突然delay太久而被對方認為timeout 如以19200來傳 各byte間的間隔約0.5 ~ 1 ms 但為何有時卻會出現3 ~ 9 ms之久 是小弟modem設定有問題嗎 小弟所使用的modem為LEMEL 56k蝙蝠車 另一為Mitac的56K深藍E210
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-02-26 15:17:25 IP:61.217.xxx.xxx 未訂閱
是因該結案的時候了 你現在所問的問題 已超出程式範圍之外 俺無能為力 sorry    
系統時間:2024-04-26 12:21:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!