Multitasking und Kommunikationsinterrupt

  • Hallo,
    ich verwende zwei Programme, eines für das Senden und Empfangen und das andere für die Roboterbewegungen.


    Jetzt kommt es alledings vor, dass der Kommunikationsinterrupt ausgelöst wird und mein Task 2 (Send&Rcv) auf der Input Zeile stehen bleibt und keine Daten einliest.
    Hat von euch schon einmal ein ähnliches Problem gehabt und kann mir hiebei weiterhelfen?

  • ANZEIGE
  • Liegt das Problem vielleicht darin:


    Nachdem der Kom-Interrupt ausgelöst wird und Task/Prog 2 in das entsprechende Unterprogramm springt, stoppe ich den Interrupt mit dem Befehl "COM(1) STOP" und starte ihn nach der Empfangs-Datenverarbeitung (am Ende des Unterprogramms) mit "COM(1) ON" wieder.


    Mal blöd gefragt:
    Ist es möglich, dass die Daten von der Kommunikationsleitung verschwunden sind, bis ich den Kom-Int. wieder starte?
    oder
    Ist es möglich, das der Kom-Int. durch das stoppen und starten durcheinander kommt und anstatt der Empfangsleitung, die Sendeleitung abhört?

  • Wie schon gesagt, ich bin nicht sicher, ob Melfa Basic in diesem Bereich völlig bugfrei ist.


    Vielleicht kann dir der Support bei diesem Problem helfen. Eventuell beseitigt ein Update des Roboterbetriebssystems dein Problem.

  • Ich werd's gleich mal beim Support probieren.


    Der folgende Code zeigt die relevanten Zeilen meines Programms.
    Vielleicht sieht jemand einen Fehler, den ich bis jetzt übersehen habe.


    Programm 1:



    Programm 2:

  • Hallo,
    ich bin wieder einen Schritt weiter.
    Das Problem lagt darin, dass ich wie oben im Code, Programm 2 zu sehen ist, den Kom-Int. erst in dem Unterprogramm gestoppt und vor der RETURN Anweisung wieder gestartet habe.
    Deshalb wurde immer ein GOSUB aufgerufen aber es wurde nie mit RETURN zurück gesprungen, da der Kom-Int kam.


    Ich hab jetzt mein *Main Teil in Programm 2 umgeschrieben und bekomme jetzt nach ein paar durchläufen folgenden Fehler:
    Fehler 3253: Zu viele Programmverschachtelungen (IF, ENDIF); Die Anzahl der Programmebenen übersteigt 8.


    Code
    1240 *Main
    1250 IF M_05=1 THEN 
    1260 	COM(1) STOP			'Kom-Interrupt stoppen
    1270 	GOSUB *senden		'Daten senden
    1280 	COM(1) ON 			'Kom-Interrupt wieder starten
    1290 ENDIF
    1300 GOTO *Main


    Das Programm bleib auf Zeile 1250 stehen.


    Aber warum bekomme ich diesen Fehler???
    Wo in meinem Programm gibt es so viele Verschachtelungen?

  • Tja, mühsam ernährt sich das Eichhörnchen :mrgreen:


    Das Ganze bestätigt nur meine Aussage aus dem anderen Thread, dass ich dieser ganzen Interruptgeschichte im Zusammenhang mit dem Ethernet nicht traue. :aufsmaul:


    Deswegen sehen meine liebsten Melfa Basic Programme auch so aus, wie in diesem Beitrag
    http://www.roboterforum.de/rob….0.html;msg23064#msg23064
    und ich kann mich lieber mit den Eigenheiten von Visual C++ herumschlagen, statt mit denen von Melfa Basic.


    Was ich sagen kann, ist das dieser Fehler durch das Überlaufen einer Tabelle im Basic-Interpreter verursacht wird. Dieser ist also der Meinung er hat zu viele verschachtelte Ifs. Normalerweise passiert das durch zu viele rekursive Aufrufe oder Rücksprungs aus GOSUB Routinen mit GOTO, statt RETURN.


    Beides kann ich auf die Schnelle so nicht entdecken. Vielleicht ein Seiteneffekt der Interrupts.


    Da kann ich leider nicht weiterhelfen, der Aufbau unterscheidet sich zu sehr von meiner normalen Programmarchitektur.


    Grüße


    Urmel

    Einmal editiert, zuletzt von Urmel ()

  • Hallo,
    mein Hilfeschrei war wohl zu früh ... ich habe meinen Fehler gefunden bzw. die Fehlerbeschreibung verstanden.


    Es liegt daran, das ich in der IF ... ENDIF Anweisung über GOSUB in mein Unterprog *senden springe und dort in meiner FOR Schleife in ein weiteres Unterprog springe das eine If Anweisung besitzt. Diese Unterprog wird 16 mal aufgerufen!


    Trotzdem Danke für die wieder einmal schnelle Antwort / Hilfe.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden