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

Re: fatal error, cannot create VMC Kategorie: Programmierung (von Tom - 2.07.2003 8:09)
Als Antwort auf fatal error, cannot create VMC von Peda - 1.07.2003 21:31

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;
> }
>




    Antwort schreiben


Antworten: