Für dieses Forum muß Javascript im Browser aktiviert werden!
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 Peter, > > kannst Du vieleicht mal deine C2P Datei posten. > > mfg Tom > > > > Hallo Leute! > > > > Kann mir jemand helfen? > > > > Seit einiger Zeit probiere ich nun mein Programm, dass auf mehrere Module aufgeteilt ist zu kompilieren. > > Dabei bekomme ich immer folgende Fehlermeldung: fatal error, cannot create VMC > > Ein Syntax-Fehler wird mir bei keinem Modul angezeigt. > > > > Kannst du dir bitte meinen Programmcode kontrollieren und mir weiterhelfen? > > Danke! > > > > Grüße > > > > Peter > > > > > > > > Modul: abfrage.c2 > > > > //Variable für Touchpanel-Portausgabe > > type var > > { > > byte switch; > > byte wert; > > } > > var t[32]; // t...Touchpanelport > > > > //Variable zur Bargraphdefinitionn für EA KIT 320-8 > > type bgraph > > { > > byte wert; > > } > > bgraph bar[255]; > > > > //Konstanten > > const ESC = 27; > > const Schalter = 2; > > const Bargraph = 3; > > const Menueeintrag = 4; > > const TB_ein = 5; > > //*********** > > thread abfrag > > //*********** > > { > > run 32; > > > > //Empfangsvariablendefinition > > byte pos1; > > byte pos2; > > > > hwcom.init(); > > hwcom.setspeed (hwcom.SPEED_9600); > > > > wait hwcom.rxd(); > > pos1=hwcom.get(); > > > > //Logikteil > > > > if pos1 == ESC > > { > > > > wait hwcom.rxd(); > > pos2=hwcom.get(); > > > > if pos2 == Schalter > > { > > func.Schalter(); > > } > > if pos2 == Bargraph > > { > > func.Bargraph(); > > } > > if pos2 == Menueeintrag > > { > > func.Menueeintrag(); > > } > > if pos2 == TB_ein > > { > > func.TB_ein(); > > } > > > > > > } > > run digports.output; > > } > > > > > > > > > > > > Modul: digports > > > > /* > > > > Peter Schmidthaler > > Diplomarbeit: Steuergerät für Obstsammelmaschine > > > > Datum: 12.08.2002 > > Geändert am: 22.06.2003 > > > > ***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 > > > > > > 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] ... > > > > Touchpanel##### > > > > t[1] ... > > t[2] ... > > t[3] ... > > t[4] ... > > t[5] ... > > t[6] ... > > t[7] ... > > t[8] ... > > > > t[9] ... > > t[10] ... > > t[11] ... > > t[12] ... > > t[13] ... > > t[14] ... > > t[15] ... > > t[16] ... > > > > t[17] ... > > t[18] ... > > t[19] ... > > t[20] ... > > t[21] ... > > t[22] ... > > t[23] ... > > t[24] ... > > > > t[25] ... > > t[26] ... > > t[27] ... > > t[28] ... > > t[29] ... > > t[30] ... > > t[31] ... > > t[32] ... > > > > */ > > > > > > //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 > > > > const nulladresse = 100; > > int TB; > > > > //--------------- > > thread output > > //--------------- > > > > { > > run 32; > > > > //+++++++++++++++++++++++++++++++++++++++++++++ > > // 1. Variablendefinition > > //+++++++++++++++++++++++++++++++++++++++++++++ > > > > int portabfrage; > > int nulladresse; > > > > > > int byteport; > > int PLport[8]; > > > > int turn; > > int schleifein; //Schleifenvariable beim Input > > int schleifeout; //Schleifenvariable beim Output > > > > > > //+++++++++++++++++++++++++++++++++++++++++++++ > > // 2. Richtung der Digitalports einstellen > > //+++++++++++++++++++++++++++++++++++++++++++++ > > > > ports.set(14, dirPH_out); //Output der P.H. Ports > > ports.set(15, dirPL_out); //Output der P.L. Ports > > > > > > //+++++++++++++++++++++++++++++++++++++++++++++ > > //3. Eingangsports einlesen > > //+++++++++++++++++++++++++++++++++++++++++++++ > > > > byteport = 0; //Adress- und Datensendeport > > > > for turn = 0 ... 1 > > { > > for schleifein = 0 ... 15 > > { > > ports.setb(byteport, init.p[schleifein].adresse); //Adresse der Input-Platine setzen > > ports.pulse(takeadress); //Adresse in die Input-Platine übernehmen > > ports.deactb(byteport); //Digitalport PL der CC2-Unit deaktivieren > > > > ports.set(15, dirPL_in); // Input der P.L. Ports > > > > init.p[schleifein].zustand[turn] = ports.get(init.p[schleifein].port); > > > > init.p[schleifein].wert = init.p[schleifein].zustand[0] + init.p[schleifein].zustand[1]; > > > > if init.p[schleifein].wert+2 > > { > > init.p[schleifein].wert = 255; // Wenn beide Werte high dann ist auch > > // der Ausgabewert high > > } > > else init.p[schleifein].wert = 0; // Sonst ist der Ausgabewert low > > > > ports.deactb(byteport); //Digitalports der CC2-Unit deaktivieren > > > > > > /* 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 > > //+++++++++++++++++++++++++++++++++++++++++++++ > > > > ports.setb(byteport, nulladresse); //Nulladresse > > ports.pulse(takeadress); //Adresse in die Input-Platine übernehmen > > > > for schleifeout = 0 ... 15 > > { > > ports.setb(byteport, init.y[schleifeout].adresse); //Adresse der Output-Platine setzen > > ports.pulse(takeadress); //Adresse in die Output-Platine übernehmen > > ports.deactb(byteport); //Digitalport PL der CC2-Unit deaktivieren > > > > ports.set(15, dirPL_out); // Output der P.L. Ports > > > > ports.set(init.y[schleifeout].port, init.y[schleifeout].wert); > > > > } > > ports.deactb(byteport); //Digitalport PL der CC2-Unit deativieren > > > > > > //+++++++++++++++++++++++++++++++++++++++++++++ > > //5. TB-Schalter setzen > > //+++++++++++++++++++++++++++++++++++++++++++++ > > > > for TB = 1 ... 32 > > { > > func.Schalter_setzen(); > > } > > > > run abfrage.abfrag; > > > > } > > > > > > > > > > Modul: func > > > > /* > > 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; > > > > //Funktion fertig > > function Schalter() > > { > > wait hwcom.rxd(); > > pos3=hwcom.get(); > > > > wait hwcom.rxd(); > > switch=hwcom.get(); > > > > wait hwcom.rxd(); > > data=hwcom.get(); > > > > if pos3==2 > > { > > abfrage.t[switch].wert = data; > > } > > } > > > > > > function Schalter_setzen() > > { > > hwcom.init(); > > hwcom.ready(); > > hwcom.put(27); //ESC > > hwcom.put(65); //A > > hwcom.put(80); //P > > hwcom.put(abfrage.t[digports.TB].switch); //Code (Schalter) > > hwcom.put(abfrage.t[digports.TB].wert);//Wert (Zustand) > > } > > > > //Funktion noch nicht fertig > > function Bargraph() > > { > > pos3=1; > > } > > > > > > //Funktion noch nicht fertig > > function Menueeintrag() > > { > > pos3=1; > > } > > > > > > //Funktion noch nicht fertig > > function TB_ein() > > { > > pos3=1; > > } > > > > > > > > > > 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. > > > > */ > > > > //Globale Variablen > > > > //Eingabevariablen definieren > > type my_in > > { > > int adresse; > > int port; > > int zustand[2]; > > int wert; > > } > > > > //Ausgabevariablen definieren > > type my_out > > { > > int adresse; > > int port; > > int wert; > > } > > > > my_in p[16]; > > my_out y[16]; > > > > int adress[2]; > > int adressout[2]; > > int schleife; > > > > //Kartenadressen festlegen > > /////////////////////////////////// > > //Adresse muss noch geaendert werden > > ////////////////////////////////// > > > > const inputmodul1 = 16; > > const inputmodul2 = 17; > > > > const outputmodul1 = 18; > > const outputmodul2 = 19; > > const outputmodul3 = 3; > > const outputmodul4 = 4; > > > > //--------------- > > thread init > > //--------------- > > { > > run 32; > > > > int begin; > > > > ports.deactw(0); > > > > //Startbedingungen für Digital-Input > > > > p[1].port = 0; // Taster 1 > > p[2].port = 1; // Taster 2 > > p[3].port = 2; // Taster 3 > > p[4].port = 3; // Taster 4 > > p[5].port = 4; // Taster 5 > > p[6].port = 5; // Taster 6 > > p[7].port = 6; // Taster 7 > > p[8].port = 7; // Taster 8 > > > > p[9].port = 0; // Taster 9 > > p[10].port = 1; // Taster 10 > > p[11].port = 2; // Taster 11 > > p[12].port = 3; // Taster 12 > > p[13].port = 4; // Taster 13 > > p[14].port = 5; // Taster 14 > > p[15].port = 6; // Taster 15 > > p[16].port = 7; // Taster 16 > > > > for begin = 1 ... <9 > > { > > p[begin].adresse = inputmodul1; > > p[begin].zustand[0] = 0; > > p[begin].zustand[1] = 0; > > } > > > > for begin = 9 ... <17 > > { > > p[begin].adresse = inputmodul2; > > p[begin].zustand[0] = 0; > > p[begin].zustand[1] = 0; > > } > > > > //Startbedingungen für Digital Output > > > > y[1].port = 0;// Taster 0 > > y[2].port = 1; // Taster 1 > > y[3].port = 2; // Taster 2 > > y[4].port = 3; // Taster 3 > > y[5].port = 4; // Taster 4 > > y[6].port = 5; // Taster 5 > > y[7].port = 6; // Taster 6 > > y[8].port = 7; // Taster 7 > > > > y[9].port = 0; // Taster 8 > > y[10].port = 1; // Taster 9 > > y[11].port = 2; // Taster 10 > > y[12].port = 3; // Taster 11 > > y[13].port = 4; // Taster 12 > > y[14].port = 5; // Taster 13 > > y[15].port = 6; // Taster 14 > > y[16].port = 7; // Taster 15 > > > > for begin = 1 ... <9 > > { > > y[begin].adresse = outputmodul1; > > y[begin].wert = 0; //Darf während des Programmdurchlaufs nicht erfolgen > > } > > > > for begin = 9 ... <17 > > { > > y[begin].adresse = outputmodul2; > > y[begin].wert = 0; // Darf während des Programmdurchlaufs nicht erfolgen > > } > > run abfrage.abfrag; > > } > > > > > > > > Modul: mother > > > > //############################################################## > > /* > > Funktion der einzelnen Module: > > > > A) mother... main-Thread Modul > > b) func... sämtliche Funktionen > > c) abfrage... Touchpanel-Kommunikation > > d) input... Einlesen der Unit-Ports > > e) digports... Ausgabe an die Ports > > f) init... Start- oder Reset-Modul > > > > */ > > > > //********* > > thread main > > //********* > > { > > run init.init; > > } > >