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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> 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 <code>max7311.getw(0);</code> auszulesen. > > > new1= inp1; > > new2= inp2; > > loop > > { > > wait((ports.get(8) & 0x01 )==0 ); // warten bis Interrupt ausgelöst wird... > > Ein <code>(ports.get(8) & 0x01 )==0</code> ist unnötig, da die Rückgabe bei <code>ports.get()</code> > entweder -1 oder 0 sein. Somit würde ein <code>wait not ports.get(8);</code> 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 <code>hwcom.ready()</code> prüfen, > bevor Du sbuf[] wieder bearbeitest. Denn das Senden geschieht im Hintergrund. > > > new1= inp1; > > new2= inp2; > > } > > } > > // Ende Code--------------------------------- > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB