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 Thomas, > > > > Wie sieht genau die Definition des eigenen Datentyps aus, und > > wie groß ist das Array definiert ? > > <code> > type typSwitch > { > // dies ist die Beschreibung der einzelnen Input! Schalter > byte bInputPort; // PortNummer für den Input > byte bCountOfOutputs; // wieviele Outputports wollen wir schalten? > typSwitchAddress arSwitchAddress[dcl.COUNT_SWITCH_PER_INPUT]; // Liste der Adressen > string strDescription; // Beschreibung des Ports > byte bolSpecial; > } > > type typSwitchModule > { > // dies ist die Datenstruktur für die I/O Module > byte bInputAdr; // Input Adresse > byte bOutputAdr; // Output Adresse > byte bOutputValue; // Wie sieht der Startwert für den Output aus? > byte bInputValue; // Aktueller Input > /* Nun kommt die Taster Maske, da einige Ports auch von Schaltern > belegt werden, wollen wir diese ausblenden. Jeder Port welcher ein Taster > ist, wird mit einer 1 in der Maske repräsentiert */ > byte bValueButtonAndMask; > byte bAktiv; // Ist das Modul aktiv? > string strLocation; // Lokation des Moduls > typSwitch arSwitch[dcl.COUNT_PORTS]; // Liste der Schalter > } > </code> > Das Array arSwitch ist 8 Elemente groß. > Das Array arSwitchModule ist 4 Elemente groß. > > > > Es gibt zwar ein kleines Problem mit der Parameterübergabe > > von Strings aus zusammengesetzten Datentypen, aber ich denke, das hat > > hiermit nichts zu tun. > > > > Auch ein Stackproblem kann ich ausschließen, da in einem solchen Fall > > das Programm bei einem Overflow oder Underflow abbrechen würde > > und eine entsprechende Meldung an der Host-LED ausgegeben wird. > > > > Aber noch ein paar Fragen: > > Wird aus anderen Threads auf den PCF8574 zugegriffen ? > Ja aber ohne ein eigene Capture. Es ist doch in pcf drin? > > Kannst Du genau sagen, daß das Hängenbleiben beim Aufruf von pcf.in() passiert? > > (ggf. temporär Debuggingausgaben in der Funktion pcf.in() am Anfang und vor dem Return einfügen.) > Ich denke ja, werde ich aber auch in pcf.in direkt einmal loggen. > > Da Du eine eigene Platine verwendest, benutzt Du die Ports P1H.0-.3 ? > > Wenn nicht, hast Du Pull-Up-Widerstände angebracht ? > Ja sollten drin sein (Modul ist nicht von mir gebaut) > > Ansonsten kann es durch Störungen zu einer Programmverlangsamung kommen. > > (Es reicht oft eine Leuchtstoffröhre, oder auch Funkenbildung bei Schaltern.) > Das könnte es natürlich sein. Eigentlich ist der I2C Bus soweit es geht von solchen Quellen entfernt > und mit CAT5 Kabel gebaut (ca. 20m). Hhmm vieleicht die Module und das Schalten der Relais in > den Modulen. Eventuell ist ja hier was nicht korrekt... > > Hast Du irgendwelche rekursiven Aufrufe in Deinem Programm ? > > (Funktionen, die sich selbst aufrufen) > Nein. > > > > > > Noch ein kleiner Tip für Deine Funktion: > > Statt > > <code>bInput1 = (not pcf.in (data.arSwitchModule[bIndex].bInputAdr)) > > and (not data.arSwitchModule[bIndex].bValueButtonAndMask);</code> > > kannst Du einfach auch > > <code>bInput1 = pcf.in (data.arSwitchModule[bIndex].bInputAdr) > > nor data.arSwitchModule[bIndex].bValueButtonAndMask;</code> > > schreiben. > Stimmt, Danke für den Tip. > > > > > Meine Frage ist nun: Macht es Sinn den Aufruf <code> pcf.in (data.arSwitchModule[bIndex].bInputAdr)</code> > > > besser so zu formulieren: > > > <code>bHilf = data.arSwitchModule[bIndex].bInputAdr; > > > pcf.in(bHilf);</code> > > > > Prinzipiell darf es hier kein Unterschied geben. > > > > > Denn ein ähnliches Problem trat beim Setzen des Ports mit pcf.set auf und hier hat dies geholfen. > > > > Kannst Du das kurz schildern? > > Folgendes funktioniert, d.h. der Port wechselt. > <code> > if (data.arRaum[i].bControl==1) > { > bModul = data.arRaum[i].bSwitchModule; > bAdress = data.arRaum[i].bOutputPort; > if (data.arRaum[i].bAction==1) > { > /* Ok, wir sollen den Raum heizen. Also holen wir uns die Adresse > des Heizungsaktor, den aktuellen Wert. Wenn dieser gerade aus > ist (255) dann toggeln wir den Port */ > b = pcf.get(bModul,bAdress); > if ((b==255)) > if (pcf.toggle(bModul,bAdress)==0) > com.Log("HZ_Control err Toggle",bAdress); > } > } > </code> > > Wobei folgendes nicht funktioniert. Der Rückgabewert von pcf.toggle ist ungleich null und nichts passiert. > <code> > if (data.arRaum[i].bControl==1) > { > if (data.arRaum[i].bAction==1) > { > /* Ok, wir sollen den Raum heizen. Also holen wir uns die Adresse > des Heizungsaktor, den aktuellen Wert. Wenn dieser gerade aus > ist (255) dann toggeln wir den Port */ > b = pcf.get(data.arRaum[i].bSwitchModule,data.arRaum[i].bOutputPort); > if ((b==255)) > if (pcf.toggle(data.arRaum[i].bSwitchModule,data.arRaum[i].bOutputPort)==0) > com.Log("heizung.HZ_Control #ERROR# Problem to toggle Port",data.arRaum[i].bOutputPort); > } > } > </code> > Hinweis: Bei der letzten hatte ich auch noch den Fehler, dass der String länger als 30 Zeichen war. Hatte aber > beim Fehler keine Änderung gemacht. > > > > > MfG André H. > > > > Viele Grüße Thomas
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB