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

Re: 32 Digital-Eingänge? Kategorie: CC2-Unit & Appl.Board / CC2-Station (von André H. - 4.09.2004 8:34)
Als Antwort auf Re: 32 Digital-Eingänge? von joe - 1.09.2004 19:47
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo joe,

> möchte von CNC-Maschinen die Standzeiten bzw. Laufzeiten erfassen. Relaisausgänge
> von den CNC-Maschinen sind da. Ich denke da an ca. 24-32 Eingänge.
> Hab mir das so vorgestellt:
> Das c-Control sammelt die Schaltpunkte (mit Zeitstempel und Maschinen-Nummer) und
> gibt sie dann an den PC im Laufe eines Tages weiter.
>
>
> hab jetzt die Station mit i2c-max7311-board aufgebaut und programmiert.
> Schalter an Port P3 und P13 des I2C-Boards geklemmt.
> Interrupteingang auf P0/cc-Station gelegt.
> Läuft soweit gut.
>
> Mein Problem:
> Wenn ich einen von den 2 Schaltern betätige, bekomm ich manchmal die Werte
> inp1=0
> inp2=0  
> out1=0
> out2=0 übertragen, obwohl P0 gar nicht aktiv ist.

Zuerst: Bitte setze C2 Quellcode immer in die code-Tags. Dann lässt sich's leichter lesen !
           Auch wird dann Quellcode nicht verfälscht dargestellt, sobald GröÃ?er- und kleinerzeichen
           vorkommen.

Ich nehme einmal an, da� einfach zwei Interrupts ausgelöst werden. Denn ein Interrupt
seitens I²C-Portexpander wird bei jeder �nderung am Port seit dem letzten abgefragten
Zustand ausgelöst. Also hier einmal bei Drücken und einmal beim loslassen.

Nun noch ein paar Anmerkungen zu Deinen Routinen:

> // Beginn Code---------------------------------
> thread main
> { // Initialisierung
>  stports.init();
>  lcdext.init();
>  i2c.init();

Ein Init des I²C-Busses ist unnötig, da dies bereits vom OS beim Systemstart übernommen wird.

>  hwcom.init();
>  hwcom.setspeed(8);
>
>  inp1=max7311.getb(0, 0);
>  inp2=max7311.getb(0, 1);

Warum lieÃ?t Du den MAx7311 byteweise aus ?
Besser wäre es mit Integer zu arbeiten und den ganzen Baustein komplett
mit max7311.getw(0); auszulesen.

>  new1=  inp1;
>  new2=  inp2;
>  loop
>  {
>  wait((ports.get(8) & 0x01 )==0 ); // warten bis Interrupt ausgelöst wird...

Ein (ports.get(8) & 0x01 )==0 ist unnötig, da die Rückgabe bei ports.get()
entweder -1 oder 0 sein. Somit würde ein wait not ports.get(8); völlig reichen.

>        inp1= max7311.getb(0, 0); //Hole 1.Byte vom MAX7311
>        inp2= max7311.getb(0, 1); //Hole 2.Byte vom MAX7311

Hier wieder dasselbe, wie oben. Ein auslesen als Integer und eine Bearbeitung als Integer spart
einiges an Programmzeilen und fördert u.a. auch die �bersichtlichkeit.

>        out1= inp1 ^ new1;        // XOR : Welches Bit hat sich geändert?
>        out2= inp2 ^ new2;        // XOR : Welches Bit hat sich geändert?
>        system.gettime ( time );
>        sbuf[0]=system.day();
>        sbuf[2]=system.month();
>        sbuf[4]=system.year();
>        sbuf[6]=time.hour;
>        sbuf[8]=time.minute;
>        sbuf[10]=time.second;
>        sbuf[12]=out1;
>        sbuf[13]=out2;
>        sbuf[14]=inp1;
>        sbuf[15]=inp2;
>        sbuf[16]=13;
>        sbuf[17]=10;

Was ist das mit sbuf[] ?
Du speicherst die Zeitangaben nur in jedem zweiten Byte ab. Die Bytes sbuf[1], sbuf[3], sbuf[5],
sbuf[7] sbuf[9] und sbuf[11] sind immer undefiniert. Also 6 überflüssige Bytes.

> /*       showports(inp1,1);
>        showports(out1,2);*/
>        hwcom.send(sbuf, 18);

Wenn Du Datenrahmen mit hwcom sendest, solltest Du immer auf hwcom.ready() prüfen,
bevor Du sbuf[] wieder bearbeitest. Denn das Senden geschieht im Hintergrund.

>        new1= inp1;
>        new2= inp2;
> }
> }
> // Ende Code---------------------------------

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: 32 Digital-Eingänge? (von joe - 6.09.2004 20:29)
    Re: 32 Digital-Eingänge? (von André H. - 6.09.2004 21:00)
        Re: 32 Digital-Eingänge? (von joe - 8.09.2004 19:27)
            Re: 32 Digital-Eingänge? (von joe - 8.09.2004 21:18)