Programmdurchlauf funktioniert nicht richtig!! Kategorie: Programmierung (von Peter, http://members.fortunecity.de/obstsammelmaschine - 2.09.2004 22:12) | ||
| ||
Hallo Leute, kann mal jemand bitte meinen Code checken. Ich glaube ich habe ein Problem mit einem ordentlichen Programmdurchlauf. Womöglich arbeit mein thread falsch und ich komme nie zu einer Stelle im Code. Oder kann ich das Problem irgendwie mit capture und release lösen. Danke! mfg Peter Schmidthaler module 1 bis 12 der Reihe nach von 1 bis 12 in ein Projekt einfügen. //--------------------- a1_notes.c2 -------------------- /* Projektbeschreibeung Erstellt am 31. Jänner 2004 Dieses Modul (notes.c2) beschreibt die Funktion der einzelnen Module: a) moth... main-Thread Modul Startet die einzelnen Threads b) init... Start- oder Reset-Modul Legt die Grundeinstellungen für die digitalen In- und Output-Module fest. Adresse, Grundzustand, ... c) abfr... Touchpanel-Kommunikation Verarbeitet die Befehle vom Touch-Panel d) digp... digitaler Input und Output e) func... sämtliche Funktionen f) s_out Portfunktionen g) s_in Portfunktionen h) t_inp ... diverse Funktionen i) touch-panel funktionen j) drehz ... diverse Funktionen k) var ... deklarieren globaler Variablen */ //--------------------- a2_var.c2 -------------------- //Globale Variablen //Inputvariablen definieren type in { int adresse; int port; int zustand[2]; int wert; } //Outputvariablen definieren type out { int adresse; int port; int wert; } //Variable für Touchpanel-Portausgabe type var { byte switch; byte wert; } in p[16]; out y[32]; var t[32]; // t...Touchpanelport int mp[16]; int adress[2]; int adressout[2]; int TB_setzen_ok; byte TB; byte textoutput[256]; //Bytebuffervariable für Textausgabe const breaktime = 5; int schleifein; //Schleifenvariable beim Input int schleifeout; //Schleifenvariable beim Output int outputmodul[4]; int datenout[4]; byte seite; // in dieser Variablen wird die aktuelle Seitennummer des // Touchpanels gespeichert //--------------------- a3_drehz.c2 -------------------- /* Dieses Modul steuert das Menü "Drehzahlen" am Touchpanel */ //Zyklisches Senden der Drehzahlwerte, wenn die Funktion "Drehzahlen" aufgerufen //wird //--Variablendefinition-- const rotor = 1; const querschnecken = 2; const foerderband_1 = 3; const reinigungsschnecke = 4; const reinigungsbuersten = 5; const motor = 6; int rotor_drehzahl; int querschnecken_drehzahl; int foerderband_1_drehzahl; int reinigungsschnecke_drehzahl; int reinigungsbuersten_drehzahl; int motor_drehzahl; function drehzahlen() { touchlcd.barvalue(rotor, rotor_drehzahl); touchlcd.barvalue(querschnecken, querschnecken_drehzahl); touchlcd.barvalue(foerderband_1, foerderband_1_drehzahl); touchlcd.barvalue(reinigungsschnecke, reinigungsschnecke_drehzahl); touchlcd.barvalue(reinigungsbuersten, reinigungsbuersten_drehzahl); touchlcd.barvalue(motor, motor_drehzahl); } //--------------------- a4_outp.c2 -------------------- /* Dieses Modul steuert die digitalen Ausgänge der Steuerung */ int n; const EIN = 1; const AUS = 0; const touch_01 = 1; const touch_02 = 2; const touch_03 = 3; const touch_04 = 4; const touch_05 = 5; const touch_06 = 6; const touch_07 = 7; const touch_08 = 8; const touch_09 = 9; const touch_10 = 10; const touch_11 = 11; const touch_12 = 12; const touch_13 = 13; const touch_14 = 14; const touch_15 = 15; const touch_16 = 16; int ausgang_01; int ausgang_02; int ausgang_03; int ausgang_04; int ausgang_05; int ausgang_06; int ausgang_07; int ausgang_08; int ausgang_09; int ausgang_10; int ausgang_11; int ausgang_12; int ausgang_13; int ausgang_14; int ausgang_15; int ausgang_16; function ausgaenge() { touchlcd.setswitch(touch_01, ausgang_01); touchlcd.setswitch(touch_02, ausgang_02); touchlcd.setswitch(touch_03, ausgang_03); touchlcd.setswitch(touch_04, ausgang_04); touchlcd.setswitch(touch_05, ausgang_05); touchlcd.setswitch(touch_06, ausgang_06); touchlcd.setswitch(touch_07, ausgang_07); touchlcd.setswitch(touch_08, ausgang_08); touchlcd.setswitch(touch_09, ausgang_09); touchlcd.setswitch(touch_10, ausgang_10); touchlcd.setswitch(touch_11, ausgang_11); touchlcd.setswitch(touch_12, ausgang_12); touchlcd.setswitch(touch_13, ausgang_13); touchlcd.setswitch(touch_14, ausgang_14); touchlcd.setswitch(touch_15, ausgang_15); touchlcd.setswitch(touch_16, ausgang_16); } //--------------------- a5_t_inp.c2 -------------------- function menu5() { // Displayinhalt löschen, alle Pixel aus hwcom.put(27); hwcom.put(68); hwcom.put(76); //wait hwcom.ready(); // Terminal Anzeige ist nicht sichtbar, Ausgaben werden weiterhin ausgeführt hwcom.put(27); //wait hwcom.ready(); hwcom.put('T'); //wait hwcom.ready(); hwcom.put('A'); sleep a2_var.breaktime; // wait hwcom.ready(); // Der Touchbereich mit dem Return-Code (Code=0: alle Touchbereiche) wird aus // der Touchabfrage entfernt. Mit n1=0 bleibt der Bereich im Display sichtbar, // mit n1=1 wird der Bereich im Display gelöscht. hwcom.put(27); // wait hwcom.ready(); hwcom.put('A'); // wait hwcom.ready(); hwcom.put('L'); // wait hwcom.ready(); hwcom.put(0); // wait hwcom.ready(); hwcom.put(1); // wait hwcom.ready(); sleep a2_var.breaktime; touchlcd.touchfont(6); touchlcd.touchzoom(1,1); sleep a2_var.breaktime*2; //Eingang 1 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '1'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(5,7,1,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 2 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '2'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(15,17,2,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 3 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '3'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(25,26,3,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 4 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '4'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(35,37,4,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 5 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '5'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(45,47,5,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 6 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '6'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(55,57,6,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 7 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '7'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(65,67,7,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 8 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '8'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(75,77,8,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 9 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '0'; a2_var.textoutput[7] = '9'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(8,10,9,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 10 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '0'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(18,20,10,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 11 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '1'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(28,30,11,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 12 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '2'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(38,40,12,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 13 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '3'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(48,50,13,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 14 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '4'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(58,60,14,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 15 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '5'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(68,70,15,a2_var.textoutput,9); sleep a2_var.breaktime; //Eingang 16 a2_var.textoutput[0] = 'V'; a2_var.textoutput[1] = 'e'; a2_var.textoutput[2] = 'n'; a2_var.textoutput[3] = 't'; a2_var.textoutput[4] = 'i'; a2_var.textoutput[5] = 'l'; a2_var.textoutput[6] = '1'; a2_var.textoutput[7] = '6'; a2_var.textoutput[8] = 0; //touchlcd.textmode(3); touchlcd.touch_schalter(78,80,16,a2_var.textoutput,9); // Touchschalter der Eingänge einstellen lcd.init(); lcd.clear(); for a2_var.schleifein = 1 ... 16 { sleep a2_var.breaktime; touchlcd.setswitch(a2_var.p[a2_var.schleifein].port, a2_var.p[a2_var.schleifein].wert); } } //Funktion fertig //--------------------- a6_s_in.c2 -------------------- byte schalter; function eingaenge() { for schalter = 1 ... 8 { touchlcd.setswitch(schalter, a2_var.p[schalter].wert); } } //--------------------- a7_s_out.c2 -------------------- byte mist; byte schalter; byte wert; function ausgaenge() { for schalter = 1 ... 8 { if a2_var.y[schalter+16].wert == 1 { wert = 0; } else { wert = 1; } touchlcd.setswitch(schalter, wert); } } function switch() { mist = hwcom.get(); //wird nicht verwendet sleep 10; schalter =hwcom.get(); sleep 10; hwcom.put('A'); //Alle Zustände sind im folgendem Code invertiert. Grund dafür ist der Puffer- //baustein 74540 der die Zustände invertiert. if a2_var.seite == 201 { //Ausgang 1 if schalter == 1 { a2_var.y[17].wert = 0; } if schalter == 101 { a2_var.y[17].wert = 1; } // Ausgang 2 if schalter == 2 { a2_var.y[18].wert = 0; } if schalter == 102 { a2_var.y[18].wert = 1; } // Ausgang 3 if schalter == 3 { a2_var.y[19].wert = 0; } if schalter == 103 { a2_var.y[19].wert = 1; } // Ausgang 4 if schalter == 4 { a2_var.y[20].wert = 0; } if schalter == 104 { a2_var.y[20].wert = 1; } // Ausgang 5 if schalter == 5 { a2_var.y[21].wert = 0; } if schalter == 105 { a2_var.y[21].wert = 1; } // Ausgang 6 if schalter == 6 { a2_var.y[22].wert = 0; } if schalter == 106 { a2_var.y[22].wert = 1; } // Ausgang 7 if schalter == 7 { a2_var.y[23].wert = 0; } if schalter == 107 { a2_var.y[23].wert = 1; } // Ausgang 8 if schalter == 8 { a2_var.y[24].wert = 0; } if schalter == 108 { a2_var.y[24].wert = 1; } } } //--------------------- a8_func.c2 -------------------- /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 24.06.2003 Geändert am: 24.06.2003 ***Mit diesem Modul werden Steuerbefehle in Funktionen verarbeitet.*** Funktionen im Modul: -------------------- 1. Schalter() Touchschalter werden gelesen und der Wert in die entsprechende Variable gespeichert. Die Variablen lauten abfrage.t[x] 2. Bargraph() 3. Menueeintrag() 4. TB_ein() */ byte pos3; byte switch; byte data; byte menue; byte s; byte ausgang; byte zustand; // Zustand des Touchschalters, entweder 1 oder 0 //Menüeinträge function menue1() { } function menue2() { } function Schalter_setzen() { if a2_var.t[switch].wert == 1 { a2_var.t[switch].wert = 0; } else { a2_var.t[switch].wert = 1; } hwcom.put(27); //ESC hwcom.put(65); //A hwcom.put(80); //P hwcom.put(a2_var.TB); //Code (Schalter) hwcom.put(a2_var.t[a2_var.TB].wert);//Wert (Zustand) a2_var.TB_setzen_ok = 0; } //Funktion noch nicht fertig function Bargraph() { } function a1() { if a2_var.mp[1] == 0 { a2_var.mp[1] = 1; } else { a2_var.mp[1] =0; } ports.set(0, a2_var.mp[1]); } function a2() { if a2_var.mp[2] == 0 { a2_var.mp[2] = 1; } else { a2_var.mp[2] =0; } ports.set(1, a2_var.mp[2]); } function a3() { if a2_var.mp[3] == 0 { a2_var.mp[3] = 1; } else { a2_var.mp[3] =0; } ports.set(2, a2_var.mp[3]); } function a4() { if a2_var.mp[4] == 0 { a2_var.mp[4] = 1; } else { a2_var.mp[4] =0; } ports.set(3, a2_var.mp[4]); } function a5() { if a2_var.mp[5] == 0 { a2_var.mp[5] = 1; } else { a2_var.mp[5] =0; } ports.set(4, a2_var.mp[5]); } function a6() { if a2_var.mp[6] == 0 { a2_var.mp[6] = 1; } else { a2_var.mp[6] =0; } ports.set(5, a2_var.mp[6]); } function a7() { if a2_var.mp[7] == 0 { a2_var.mp[7] = 1; } else { a2_var.mp[7] =0; } ports.set(6, a2_var.mp[7]); } function a8() { if a2_var.mp[8] == 0 { a2_var.mp[8] = 1; } else { a2_var.mp[8] =0; } ports.set(7, a2_var.mp[8]); } function a9() { if a2_var.mp[9] == 0 { a2_var.mp[9] = 1; } else { a2_var.mp[9] =0; } ports.set(8, a2_var.mp[9]); } function a10() { if a2_var.mp[10] == 0 { a2_var.mp[10] = 1; } else { a2_var.mp[10] =0; } ports.set(9, a2_var.mp[10]); } function a11() { if a2_var.mp[11] == 0 { a2_var.mp[11] = 1; } else { a2_var.mp[11] =0; } ports.set(10, a2_var.mp[11]); } function a12() { if a2_var.mp[12] == 0 { a2_var.mp[12] = 1; } else { a2_var.mp[12] =0; } ports.set(11, a2_var.mp[12]); } function a13() { if a2_var.mp[13] == 0 { a2_var.mp[13] = 1; } else { a2_var.mp[13] =0; } ports.set(12, a2_var.mp[13]); } function a14() { if a2_var.mp[14] == 0 { a2_var.mp[14] = 1; } else { a2_var.mp[14] =0; } ports.set(13, a2_var.mp[14]); } function a15() { if a2_var.mp[15] == 0 { a2_var.mp[15] = 1; } else { a2_var.mp[15] =0; } ports.set(14, a2_var.mp[15]); } function a16() { if a2_var.mp[16] == 0 { a2_var.mp[16] = 1; } else { a2_var.mp[16] =0; } ports.set(15, a2_var.mp[16]); } // Byteports deactivieren function m20() { ports.deactb(0); // P1L-ports deactivieren } function m21() { ports.deactb(1); // P1H-ports deactivieren } function m22() { ports.setb(0,0); } function m23() { ports.setb(1,0); } //Funktion noch nicht fertig function Menue() { sleep 10; pos3=hwcom.get(); //wird nicht überprüft sleep 10; menue=hwcom.get(); sleep 10; zustand=hwcom.get(); if menue == 201 { if zustand == 1 { a2_var.seite = 201; a7_s_out.ausgaenge(); zustand = 0; } } if menue == 202 { if zustand == 1 { a2_var.seite = 202; a6_s_in.eingaenge(); zustand = 0; } } if menue == 3 { a8_func.a3(); } if menue == 4 { a8_func.a4(); } if menue == 5 { a8_func.a5(); } if menue == 6 { a8_func.a6(); } if menue == 7 { a8_func.a7(); } if menue == 8 { a8_func.a8(); } if menue == 9 { a8_func.a9(); } if menue == 10 { a8_func.a10(); } if menue == 11 { a8_func.a11(); } if menue == 12 { a8_func.a12(); } if menue == 13 { a8_func.a13(); } if menue == 14 { a8_func.a14(); } if menue == 15 { a8_func.a15(); } if menue == 16 { a8_func.a16(); } if menue == 20 { a8_func.m20(); } if menue == 21 { a8_func.m21(); } if menue == 22 { a8_func.m22(); } if menue == 23 { a8_func.m23(); } if menue == 101 { a8_func.menue1(); } if menue == 102 { a8_func.menue2(); } if menue == 103 { } if menue == 104 { } if menue == 105 { a5_t_inp.menu5(); } if menue == 106 { } } function Schalter() { sleep 10; //wait hwcom.rxd(); pos3=hwcom.get(); //wird nicht überprüft sleep 10; //wait hwcom.rxd(); switch=hwcom.get(); /* wait hwcom.rxd(); data=hwcom.get(); */ if switch == 1 { a8_func.a1(); } if switch == 2 { a8_func.a2(); } if switch == 3 { a8_func.a3(); } if switch == 4 { a8_func.a4(); } if switch == 5 { a8_func.a5(); } if switch == 6 { a8_func.a6(); } if switch == 7 { a8_func.a7(); } if switch == 8 { a8_func.a8(); } if switch == 9 { a8_func.a9(); } if switch == 10 { a8_func.a10(); } if switch == 11 { a8_func.a11(); } if switch == 12 { a8_func.a12(); } if switch == 13 { a8_func.a13(); } if switch == 14 { a8_func.a14(); } if switch == 15 { a8_func.a15(); } if switch == 16 { a8_func.a16(); } if switch == 20 { a8_func.m20(); } if switch == 21 { a8_func.m21(); } if switch == 22 { a8_func.m22(); } if switch == 23 { a8_func.m23(); } } //Funktion noch nicht fertig function TB_ein() { } //--------------------- a9_digp.c2 -------------------- //Modul: digports /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 12.08.2002 Geändert am: 08.03.2004 ***Mit diesem Modul werden die Eingangsports abgefragt und je nach Signaleingang werden die Ausgangsports geschaltet.*** Funktionen im Modul: -------------------- 1. Variablendefinition 2. Richtung der Digitalports einstellen 3. Eingangsports einlesen 4. Ausgabeports setzen 5. TB-Schalter setzen p(x) ... Inputvariablen y(x) ... Outputvariablen */ //Ausgaberichtung des Parallelbuses const dirPH_out = 0; const dirPH_in = 1; const dirPL_out = 1; const dirPL_in = 0; //Aktivierungskonstanten für Adresse und Daten const takeadress = 12; // Adressuebernahme mittels Port P1H.4 const takedata = 13; // Datenuebernahme mittels Port P1H.5 type bgraph { byte wert; } const ESC = 27; const Schalter = 65; const Bargraph = 3; const Menue = 88; const TB_ein = 5; const man_ausgang = 100; //--------------- function input() //thread //--------------- { // hwcom.put(a2_var.p[17].wert); int P1L_ports; //Adresse der Byteports P1H und P1L int P1H_ports; int turn; //Schleifenvariable string anzeige1; string anzeige2; int pause; int pause2; int daten1; //Dient nur als Zwischenspeicher int daten2; //Dient nur als Zwischenspeicher pause = 1; pause2 = 1; //+++++++++++++++++++++++++++++++++++++++++++++ // 2. Richtung der Digitalports einstellen //+++++++++++++++++++++++++++++++++++++++++++++ lcd.init(); sleep pause; lcd.clear(); sleep pause; //++++++++++++++++++++++++++++++++++++++++++++ //3. Eingangsports einlesen //+++++++++++++++++++++++++++++++++++++++++++++ P1L_ports = 0; //P1L-Ports Adress- und Datensendeport P1H_ports = 1; // Input-Modul 1 for a2_var.schleifein = 1 ... 8//16 { ports.deactb(P1L_ports); ports.deactb(P1H_ports); ports.setb(P1H_ports,0); sleep pause; ports.set(14, dirPH_out); //Output der P.H. Ports gesteuert über Port P1H.6 sleep pause; ports.set(15, dirPL_out); //Output der P.L. Ports gesteuert über Port P1H.7 sleep pause; ports.setb(P1L_ports, a2_var.p[a2_var.schleifein].adresse); //Adresse der Input-Platine setzen sleep pause; ports.set(takeadress,1); //Adresse in die Input-Platine übernehmen sleep pause; ports.set(takeadress,0); sleep pause; ports.deactb(P1L_ports); //Digitalport PL der CC2-Unit deaktivieren sleep pause; ports.set(15, dirPL_in); // Input der P.L. Ports sleep pause; ports.set(takedata, 1); // Einlesen der Eingänge sleep pause; for turn = 0 ... 1 { a2_var.p[a2_var.schleifein].zustand[turn] = ports.get(a2_var.p[a2_var.schleifein].port); sleep pause; } ports.set(takedata, 0); // Einlesen der Eingänge a2_var.p[a2_var.schleifein].wert = a2_var.p[a2_var.schleifein].zustand[0] + a2_var.p[a2_var.schleifein].zustand[1]; if a2_var.p[a2_var.schleifein].wert == -2 // setzt sich aus -1 + -1 zusammen { // Wenn beide Werte HIGH dann ist auch der Ausgabewert HIGH a2_var.p[a2_var.schleifein].wert = 49; lcd.goto(0,a2_var.schleifein-1); lcd.put(a2_var.p[a2_var.schleifein].wert); a2_var.p[a2_var.schleifein].wert = 1; } else { a2_var.p[a2_var.schleifein].wert = 48; // Sonst ist der Ausgabewert LOW lcd.goto(0,a2_var.schleifein-1); lcd.put(a2_var.p[a2_var.schleifein].wert); a2_var.p[a2_var.schleifein].wert = 0; } // ports.deactb(0); //Digitalports der CC2-Unit deaktivieren // ports.deactb(1); /* möglicherweise sind Pullup-Widerstände erforderlich, da sich sonst der Pufferbaustein des Digital-Input-Moduls sich nicht im high-impedance Zustand befindet */ } /* // Input-Modul 2 for a2_var.schleifein = 9 ... 16//16 { ports.deactb(P1L_ports); ports.deactb(P1H_ports); ports.setb(P1H_ports,0); sleep pause; ports.set(14, dirPH_out); //Output der P.H. Ports gesteuert über Port P1H.6 sleep pause; ports.set(15, dirPL_out); //Output der P.L. Ports gesteuert über Port P1H.7 sleep pause; ports.setb(P1L_ports, a2_var.p[a2_var.schleifein].adresse); //Adresse der Input-Platine setzen sleep pause; ports.set(takeadress,1); //Adresse in die Input-Platine übernehmen sleep pause; ports.set(takeadress,0); sleep pause; ports.deactb(P1L_ports); //Digitalport PL der CC2-Unit deaktivieren sleep pause; ports.set(15, dirPL_in); // Input der P.L. Ports sleep pause; ports.set(takedata, 1); // Einlesen der Eingänge sleep pause; for turn = 0 ... 1 { a2_var.p[a2_var.schleifein].zustand[turn] = ports.get(a2_var.p[a2_var.schleifein].port); sleep pause; } ports.set(takedata, 0); // Einlesen der Eingänge a2_var.p[a2_var.schleifein].wert = a2_var.p[a2_var.schleifein].zustand[0] + a2_var.p[a2_var.schleifein].zustand[1]; if a2_var.p[a2_var.schleifein].wert == -2 // setzt sich aus -1 + -1 zusammen { // Wenn beide Werte HIGH dann ist auch der Ausgabewert HIGH a2_var.p[a2_var.schleifein].wert = 49; lcd.goto(1,a2_var.schleifein-9); lcd.put(a2_var.p[a2_var.schleifein].wert); a2_var.p[a2_var.schleifein].wert = 1; } else { a2_var.p[a2_var.schleifein].wert = 48; // Sonst ist der Ausgabewert LOW lcd.goto(1,a2_var.schleifein-9); lcd.put(a2_var.p[a2_var.schleifein].wert); a2_var.p[a2_var.schleifein].wert = 0; } // ports.deactb(0); //Digitalports der CC2-Unit deaktivieren // ports.deactb(1); // möglicherweise sind Pullup-Widerstände erforderlich, // da sich sonst der Pufferbaustein des Digital-Input-Moduls sich nicht // im high-impedance Zustand befindet } */ //+++++++++++++++++++++++++++++++++++++++++++++ //4. Ausgabeports setzen //+++++++++++++++++++++++++++++++++++++++++++++ // Die Ausgabeports wurden vertauscht, um //hwcom.put(a4_func.seite); //hwcom.put(a2_var.p[17].wert); /* a2_var.y[18].wert = 1; a2_var.y[19].wert = 1; a2_var.y[20].wert = 1; a2_var.y[21].wert = 1; a2_var.y[22].wert = 1; */ a2_var.y[17].wert = 1; a2_var.y[23].wert = 0; a2_var.y[24].wert = 0; daten1 = a2_var.y[1].wert*2 + a2_var.y[2].wert*1 + a2_var.y[3].wert*8 + a2_var.y[4].wert*4; daten2 = a2_var.y[5].wert*64 + a2_var.y[6].wert*128 + a2_var.y[7].wert*16 + a2_var.y[8].wert*32; a2_var.datenout[1] = daten1 + daten2; daten1 = a2_var.y[9].wert*2 + a2_var.y[10].wert*1 + a2_var.y[11].wert*8 + a2_var.y[12].wert*4; daten2 = a2_var.y[13].wert*64 + a2_var.y[14].wert*128 + a2_var.y[15].wert*16 + a2_var.y[16].wert*32; a2_var.datenout[2] = daten1 + daten2; daten1 = a2_var.y[17].wert*2 + a2_var.y[18].wert*1 + a2_var.y[19].wert*8 + a2_var.y[20].wert*4; daten2 = a2_var.y[21].wert*64 + a2_var.y[22].wert*128 + a2_var.y[23].wert*16 + a2_var.y[24].wert*32; a2_var.datenout[3] = daten1 + daten2; daten1 = a2_var.y[25].wert*2 + a2_var.y[26].wert*1 + a2_var.y[27].wert*8 + a2_var.y[28].wert*4; daten2 = a2_var.y[29].wert*64 + a2_var.y[30].wert*128 + a2_var.y[31].wert*16 + a2_var.y[32].wert*32; a2_var.datenout[4] = daten1 + daten2; ports.set(14, dirPH_out); // Output der P.H. Ports ports.set(15, dirPL_out); // Output der P.L. Ports sleep pause2; for a2_var.schleifeout = 1 ... 4 { ports.setb(P1L_ports, a2_var.outputmodul[a2_var.schleifeout]); //Adresse der Output-Platine setzen sleep pause2; ports.set(takeadress,1); //Adresse in die Output-Platine übernehmen sleep pause2; ports.set(takeadress,0); sleep pause2; ports.setb(P1L_ports, a2_var.datenout[a2_var.schleifeout]); sleep pause2; if a2_var.seite == 201 { lcd.goto(1,0); lcd.put('A'); sleep 500; } else { lcd.goto(1,0); lcd.put('B'); sleep 500; } /* if a2_var.y[17].wert == 1 { a2_var.y[17].wert = 49; lcd.goto(1,0); lcd.put(a2_var.y[17].wert); a2_var.y[17].wert = 1; } if a2_var.y[17].wert == 0 { a2_var.y[17].wert = 48; lcd.goto(1,4); lcd.put(a2_var.y[17].wert); a2_var.y[17].wert = 0; } */ /* str.clear(anzeige1); str.putint(anzeige1, a2_var.outputmodul[a2_var.schleifeout]); lcd.clear(); lcd.goto(1,0); lcd.print(anzeige1, str.length(anzeige1)); str.clear(anzeige2); str.putint(anzeige2, a2_var.datenout[a2_var.schleifeout]); lcd.goto(1,4); lcd.print(anzeige2, str.length(anzeige2)); */ ports.set(takedata,1); sleep pause2; ports.set(takedata,0); sleep pause2; } /* //+++++++++++++++++++++++++++++++++++++++++++++ //5. TB-Schalter setzen //+++++++++++++++++++++++++++++++++++++++++++++ if a2_var.TB_setzen_ok ==1 { //sleep 3000; for a2_var.TB = 101 ... 116 { sleep 10; func.Schalter_setzen(); } } //Ausgabe der Werte am LCD Display der Unit */ //run a6_abfrage.abfrage; } //--------------------- a10_abfr.c2 -------------------- //Variable zur Bargraphdefinitionn für EA KIT 320-8 type bgraph { byte wert; } bgraph bar[255]; int display; int displayanzeige; //Konstanten const ESC = 27; const Schalter = 65; const Bargraph = 3; const Menue = 88; const TB_ein = 5; const man_ausgang = 100; //*********** thread abfrage //*********** { //Empfangsvariablendefinition byte pos1; byte pos2; pos1=hwcom.get(); if pos1 == ESC { sleep 10; pos2=hwcom.get(); sleep 10; if pos2 == Schalter { a7_s_out.switch(); } if pos2 == Bargraph { a8_func.Bargraph(); } if pos2 == Menue { a8_func.Menue(); } if pos2 == TB_ein { a8_func.TB_ein(); } } a9_digp.input(); halt; } //--------------------- a11_init.c2 -------------------- //Modul: init /* Peter Schmidthaler Diplomarbeit: Steuergerät für Obstsammelmaschine Datum: 30.06.2003 Geändert am: 30.06.2003 ***Mit diesem Modul werden Initialisierungen vorgenommen.*** Funktionen im Modul: -------------------- 1. */ int schleife; //Kartenadressen festlegen /////////////////////////////////// //Adresse muss noch geaendert werden ////////////////////////////////// /* Variablenerklärung: Input########### p[1] ... p[2] ... p[3] ... p[4] ... p[5] ... p[6] ... p[7] ... p[8] ... p[9] ... p[10] ... p[11] ... p[12] ... p[13] ... p[14] ... p[15] ... p[16] ... Output########## y[1] ... y[2] ... y[3] ... y[4] ... y[5] ... y[6] ... y[7] ... y[8] ... y[9] ... y[10] ... y[11] ... y[12] ... y[13] ... y[14] ... y[15] ... y[16] ... y[17] ... y[18] ... y[19] ... y[20] ... y[21] ... y[22] ... y[23] ... y[24] ... y[25] ... y[26] ... y[27] ... y[28] ... y[29] ... y[30] ... y[31] ... y[32] ... */ // Moduladressen const inputmodul1 = 224; const inputmodul2 = 20; //ist nicht sicher //--------------- thread init //--------------- { hwcom.put('i'); hwcom.put('n'); hwcom.put('i'); hwcom.put('t'); hwcom.put('_'); hwcom.put('a'); hwcom.put(' '); a2_var.outputmodul[1] = 16; a2_var.outputmodul[2] = 17; a2_var.outputmodul[3] = 19; a2_var.outputmodul[4] = 23; int begin; ports.deactw(0); //Startbedingungen für Digital-Input //Zuweisung der Portadressen an die Variablen a2_var.p[1].port = 0; // Taster 1 a2_var.p[2].port = 1; // Taster 2 a2_var.p[3].port = 2; // Taster 3 a2_var.p[4].port = 3; // Taster 4 a2_var.p[5].port = 4; // Taster 5 a2_var.p[6].port = 5; // Taster 6 a2_var.p[7].port = 6; // Taster 7 a2_var.p[8].port = 7; // Taster 8 a2_var.p[9].port = 0; // Taster 9 a2_var.p[10].port = 1; // Taster 10 a2_var.p[11].port = 2; // Taster 11 a2_var.p[12].port = 3; // Taster 12 a2_var.p[13].port = 4; // Taster 13 a2_var.p[14].port = 5; // Taster 14 a2_var.p[15].port = 6; // Taster 15 a2_var.p[16].port = 7; // Taster 16 // Zuweisung der Moduladresse an die einzelnen Input-Module // und die Zustände 1 und 2 werden für den Start auf 0 gesetzt. // Inputmodul 1 for begin = 1 ... <9 { a2_var.p[begin].adresse = inputmodul1; a2_var.p[begin].zustand[0] = 0; a2_var.p[begin].zustand[1] = 0; a2_var.p[begin].wert = 1; //wird vom DigitalOutputModul invertiert } // Inputmodul 2 for begin = 9 ... <17 { a2_var.p[begin].adresse = inputmodul2; a2_var.p[begin].zustand[0] = 0; a2_var.p[begin].zustand[1] = 0; a2_var.p[begin].wert = 1; //wird vom DigitalOutputModul invertiert } // Startbedingungen für Digital Output // Zuweisung der Portadressen an die Variablen a2_var.y[1].port = 0;// Taster 0 a2_var.y[2].port = 1; // Taster 1 a2_var.y[3].port = 2; // Taster 2 a2_var.y[4].port = 3; // Taster 3 a2_var.y[5].port = 4; // Taster 4 a2_var.y[6].port = 5; // Taster 5 a2_var.y[7].port = 6; // Taster 6 a2_var.y[8].port = 7; // Taster 7 a2_var.y[9].port = 0; // Taster 8 a2_var.y[10].port = 1; // Taster 9 a2_var.y[11].port = 2; // Taster 10 a2_var.y[12].port = 3; // Taster 11 a2_var.y[13].port = 4; // Taster 12 a2_var.y[14].port = 5; // Taster 13 a2_var.y[15].port = 6; // Taster 14 a2_var.y[16].port = 7; // Taster 15 a2_var.y[17].port = 0;// Taster 0 a2_var.y[18].port = 1; // Taster 1 a2_var.y[19].port = 2; // Taster 2 a2_var.y[20].port = 3; // Taster 3 a2_var.y[21].port = 4; // Taster 4 a2_var.y[22].port = 5; // Taster 5 a2_var.y[23].port = 6; // Taster 6 a2_var.y[24].port = 7; // Taster 7 a2_var.y[25].port = 0; // Taster 8 a2_var.y[26].port = 1; // Taster 9 a2_var.y[27].port = 2; // Taster 10 a2_var.y[28].port = 3; // Taster 11 a2_var.y[29].port = 4; // Taster 12 a2_var.y[30].port = 5; // Taster 13 a2_var.y[31].port = 6; // Taster 14 a2_var.y[32].port = 7; // Taster 15 // Zuweisung der Moduladresse an die einzelnen Input-Module // und die Zustände 1 und 2 werden für den Start auf 0 gesetzt. for begin = 1 ... <9 { a2_var.y[begin].adresse = a2_var.outputmodul[1]; a2_var.y[begin].wert = 1; //Darf während des Programmdurchlaufs nicht erfolgen (invertiert) } for begin = 9 ... <17 { a2_var.y[begin].adresse = a2_var.outputmodul[2]; a2_var.y[begin].wert = 1; //Darf während des Programmdurchlaufs nicht erfolgen (invertiert) } for begin = 17 ... <25 { a2_var.y[begin].adresse = a2_var.outputmodul[3]; a2_var.y[begin].wert = 1; //Darf während des Programmdurchlaufs nicht erfolgen (invertiert) } for begin = 25 ... <33 { a2_var.y[begin].adresse = a2_var.outputmodul[4]; a2_var.y[begin].wert = 1; //Darf während des Programmdurchlaufs nicht erfolgen (invertiert) } //Makro 1 des Touchpanels starten hwcom.put(27); hwcom.put('M'); hwcom.put('N'); hwcom.put(1); run a10_abfr.abfrage; hwcom.put('i'); hwcom.put('n'); hwcom.put('i'); hwcom.put('t'); hwcom.put('_'); hwcom.put('e'); hwcom.put(' '); halt; } //--------------------- a12_moth.c2 -------------------- //Modul: mother //********* thread main //********* { run a11_init.init; halt; } Meine Seite: http://members.fortunecity.de/obstsammelmaschine | ||
Antwort schreiben Antworten: Re: Programmdurchlauf funktioniert nicht richtig!! (von André H. - 4.09.2004 9:44) |