Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Modemspezialist gesucht Kategorie: Sonstige Hardware (von Manfred - 4.05.2006 13:17)
Als Antwort auf Re: Modemspezialist gesucht von Martin - 3.05.2006 21:40
Ich nutze:
C164CI-ControllerBoard, eigenes Board, OSOPT V3.0
> Mit dem Softwaretool habe ich schon etwas Experimentiert bin
>  aber nicht zurechtgekommen, meine Com 1 läÃ?t sich entweder
>  nur vom Tool oder nur vom Hyperterminal ansprechen, kann
> aber auch ein NT 4 Problem sein.
> Die Meldungen auf das Display zu legen ist kein Problem ich
>  müÃ?te nur von dir Wissen welche wichtig sind. Es stehen
> 4 x 20 Zeichen zur Verfügung.
> Nachstehend der Code damit es nicht Endlos lang wird habe
> ich alles was mit Menü und sonstigen Funktionen
> zusammenhängt weggelassen, vielleicht hilft das weiter.
>
> Danke für deine Anteilnahme
> Martin
>
> Benötigt  : modem.c2(V2.0),hwcom.c2(V1.1),str.c2,strx(V2.0),   */
> /*             ports.c2
>
>
> function subEnd() returns byte
> {byte x;string s;
>  hwcom.flush();
>  top();
>  s="Verbindung beenden? (j/n) ";
>  hwcom.send(s,str.length(s));
>  wait hwcom.rxd();
>  x=hwcom.get();
>  if x=='j' or x=='J'
>       {
>        hwcom.put(x);
>        hwcom.ret();
>        hwcom.ret();
>        s="Bye ...";
>        hwcom.send(s,str.length(s));
>        wait hwcom.ready();
>        return 255;
>       }
>  return 0;
>
> }
>
> function waitconnect()returns byte//Wartet auf die "CONNECT"-Meldung vom Modem
> {string s;
>  s=13+10+"CONNECT";
>  wait hwcom.rxd();
>  hwcom.receive(in,30,1000);
>  hwcom.flush();
> // if strx.comp(in,s,9) return 255; else return 0; geändert
> if strx.comp(in,s) return 255; else return 0;
> }
>
> //------------------------------------------------------------------------------
> thread main
> {byte second, len;
>  modem.init(5,255,255);//Modem initialisieren 7 =38400 5= 9600
>  for len=0 ... 3
>  {
>   counter[len]=0;
>  }
>  in="";
>  loop
>  {wait hwcom.rxd();
>   len=hwcom.receive(in,30,1000);
>   k2="RING";
>   if strx.InStr(0,in,k2,len,4)!=-1//Modem abheben lassen bei "RING"-Meldung
>       {
>        k2="ATA"+13+10;
>        hwcom.send(k2,str.length(k2));
>        if waitconnect() // Auf "CONNECT"-Meldung warten
>          {
>           online =0;
>           run onlineCounter;
>           menu();
>           loop
>           {
>            if second!=system.second() {second=system.second();printtime();printOnline();}
>            if hwcom.rxd()
>             {byte get;
>              get=hwcom.get();
>              if get=='1' subPorts();
>              if get=='2' subCounter();
>              if get=='3' subGetAD();
>              if get=='4' subGetFRQ();
>              if get=='T' or get=='t' setTimeDate();
>              if get=='E' or get=='e'
>                      {
>                       if subEnd()
>                          {
>                           modem.commandmode();
>                           modem.hangup();
>                           reset onlineCounter;
>                           break;
>                          }
>                      }
>               menu();
>              }
>           }
>         }
>   }
>  }
> }
>

>

Hallo Martin, ich denke ich habe das Problem in der Function waitconnect gefunden:
Der String "s" hat den festen Wert  13+10+"CONNECT"
In den String "in" wird die Connect-Meldung des Modems geschrieben, z.b. 13+10+"CONNECT 32000".

Wenn du jetzt mit strx.comp diese beiden ("CONNECT" mit "CONNECT 32000) vergleichst, dann
funktioniert das ganze natürlich nicht, es dürfen ja nur die ersten 7 (9 mit CR+LF) Zeichen verglichen
werden.
Das war ja auch so in der auskommentierten Zeile vorgesehen (if strx.comp(in,s,9) ), aber strx.comp
ist dafür der falsche Befehl, er vergleicht nur ganze Strings.

Versuch das einmal:

function waitconnect()returns byte//Wartet auf die "CONNECT"-Meldung vom Modem
 {string s;
 s=13+10+"CONNECT";
 wait hwcom.rxd();
 hwcom.receive(in,30,1000);
 hwcom.flush();
// if strx.comp(in,s,9) return 255; else return 0; geändert
// if strx.comp(in,s) return 255; else return 0;
  if strx.compsel(in,s,9,0) return 255; else return 0;
 }

Oder mit der Funktion instr :

function waitconnect()returns byte//Wartet auf die "CONNECT"-Meldung vom Modem
 {string s;
 s="CONNECT";
 wait hwcom.rxd();
 hwcom.receive(in,30,1000);
 hwcom.flush();
// if strx.comp(in,s,9) return 255; else return 0; geändert
// if strx.comp(in,s) return 255; else return 0;
  if strx.instr(0,s, in,7,str.length(in)) == -1 return 0; else return 255;
}

Ich habe das nur so aus dem Bauch geschrieben, besonders bei der zweiten Lösung
bin ich etwas unsicher mit den Parametern, und hier in der Firma habe ich keinen CC2.
Wenn es nicht klappt muss ich dich aufs Wochenende vertrösten, wo ich das probieren kann.
Wie auch immer, es dürfen nur die ersten Zeichen der Connect-Meldung verglichen werden.

Zum Softwaretool:
das sollte auf einem zweiten PC laufen, der die Daten zwischen CC2 und Modem mitliest, um
so den Fehler eingrenzen zu können.
Aber ich denke das können wir uns sparen, der Fehler war ja eindeutig.

Manfred






    Antwort schreiben


Antworten:

Re: Modemspezialist gesucht (von Manfred - 4.05.2006 17:03)
    Re: Modemspezialist gesucht (von André H. - 4.05.2006 17:28)
        Re: Modemspezialist gesucht klappt noch nicht (von Martin - 6.05.2006 12:48)
            Re: Modemspezialist gesucht klappt noch nicht (von Manfred - 9.05.2006 9:30)
                Re: Modemspezialist gesucht klappt noch nicht (von martin - 10.05.2006 20:16)
                    Re: Modemspezialist gesucht klappt noch nicht (von Manfred - 15.05.2006 10:05)
                       Re: Modemspezialist (von Martin - 16.05.2006 12:24)