Q&A

  • 모뎀을 이용한 DTMF톤 검출 프로그램을 만들고 있는데...
US로보틱스 56K 메신저(보이스) 모뎀을 이용하여 걸려온 전화기에서 눌러진 DTMF톤을 검출하는 프로그램을 제작하고 있습니다. 상태 전화기에서 1,2,3 하고 누르면 프로그램에서 DTMF톤을 검출하여 프로그램으로 눌러진 숫자를 보여주고 다시 초기화한 후 다음 전화를 대기합니다.

작업의 순서는 다음과 같습니다.

1: Connect -> 모뎀 연결 -실제론 시리얼 포트에 연결하는 것 같음
2: ATH -> 전화끊고 - 실제론 시리얼 포트에 연결된 모뎀에 명령을 전달하는 것 같음
3: AT&F #CLS=8 #VLS=6 #VGT=4 #CID=1 -> 모뎀초기화, 수신 대기
4: Ring -> 전화가 오면
5: ATA -> 전화를 받고
6: 상대 전화기에 임의의 값을 보냄
7:상태 전화기에서 값을 보내옴
8: 보내온 값을 프로그램에서 숫자로 표기
9: ATH0 -> 전화끊고
10: Disconnect -> 모뎀 연결 해제 - 실재론 시리얼 포트와의 연결을 해제하는 것 같음
11: 다시 1번부터 반복하여 계속 작업을 진행

## 참고] 모뎀 통신을 위해 TCommPortDriver  컴퍼넌트를 사용하고 전송,수신된 명령과 그 결과값은 TMemo에 Add 합니다. 그리고, TShape를 이용하여 대기중일 때는 파란색, 송수신중일 때는 녹색, 연결이 해제된 경우에는 빨강색으로 표기합니다.

그런데 문제는 보통의 경우 시리얼 포트에 연결된 모뎀에 명령(위의 ATH 등)을 보면 보내진 명령과 그 결과값(정상적인 경우 OK가 떨어지겠죠)을 TMemo에서 확인할 수 있는데 어느 순간부터 (대략 1주일 정도 지난 후) 명령과 그 결과값을 확인할 수가 없는 상태가 되어 버립니다.

즉, 평소에는  TMemo에 아래와 같이 송수신 값이 보이다가 어느 정도 시간이 지나면 값이 전혀 나타나지 않습니다. 모뎀이 먹통이 되어 버린 것 같습니다. TCommPortDriver 컴퍼넌트의 특성상 모뎀에 직접적으로 연결하는 것이 아니고 시리얼 포트에 연결하는 것이라 연결 및 해제 버튼을 클릭해도 오류는 발생하지 않지만 프로그램을 정상적동을 하지 않습니다. 프로그램을 재실행도 마찬가지고, 모뎀의 전원을 끄고 다시 켜야만 정상적으로 작동합니다.

그런데, 더 미치는 것은 동일한 형태의 이전의 프로그램은 정상적으로 잘 작동한다는 것입니다. 혹시 이런 경우 만나보신 분이나 고수님의 전실한 도움을 필요합니다.

도와주세요... 살려주세요...

송수신 예)
---------------------------------------------------------
ATH
ok
AT&F #CLS=8 #VLS=6 #VGT=4 #CID=1
ok -> 여기 까지 수신대기
Ring
ATA
ok
AT#VTS={2,3} -> 상태 전화에 2번 값을 보냄
ok
+1
+2
+3
+4
ATH0
ok
---------------------------------------------------------
0  COMMENTS