Signale ohne umkopieren über den umweg sps.sub in arrays anlegen??

  • Hallo zusammen


    habe sonst Signale wie gewohnt deklariert gehabt und in einem .sub auf Arrays kopiert
    ums sie später im Programm mit Laufzeitvariablen entsprechend auszuwerten.


    jetzt gibt es eine neue Vorgabe bei uns in der Firma das das um kopieren von Signalen im .sub
    aufgrund der wirklich sehr hohen Zykluszeit untersagt.
    Proconos wird es auch net geben


    kennt jemand eine Möglichkeit dies ohne um kopieren hinzubekommen??


    brauche des dringend da das gesamte Programm darauf ausgelegt ist!!!


    Vielen Dank im vorraus

    Einmal editiert, zuletzt von Loipe ()

  • Schritt für Schritt zum Roboterprofi!
  • Hallo du Sorry war bissel unverständlich


    zum Beispiel:


    in der config.dat ist deklariert

    Code
    Signal inSt1Type $IN[1250] TO $IN[1257]


    und ich kopiere mir die im sps.sub um auf eine Variable im Array

    Code
    ziPlateType[1]=inSt1Type


    damit ich im Programm nur den Index mit einer Laufzeitvariablen austauschen brauche.


    jetzt sollen wir dieses umkopieren im SUB sein lassen, was ich ja auch zum teil verstehen kann.
    Nur ist das komplette Programm voll mit so was.


    gibt es also eine Möglichkeit das man sie direkt im Array deklariert oder ohne sub umkopiert/zuweist?

  • Loipe


    Setze Dich durch und lass es in der sub.sps.
    Wenn Du diese bedingt aufrufst z. B. mit


    If bInterfaceActive then
    ReadInput ()
    Endif


    Sonstige subberechnungen...


    If bInterfaceActive then
    WriteOutput ()
    Endif


    ,kannst Du zu Testzwecken deine EA's setzten wie Du sie brauchst.

  • ... oh das ist ja schön. was ich hier lesen darf trifft auch fast genau mein aktuelles prob. :zwink:
    eventuell kann das jmd noch etwas ausführlicher beschreiben?
    vielen dank im voraus...

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • AtoK09


    hab SM schon geschrieben was bei dem Standardisierungsversuch von PickOnTheWaste alles rausmuss.
    Da hätte man gleich das mainprogramm im submit laufen lassen können :wallbash:


    Hätte mir gleich denken woher der code kommt


    gruss robotnik

  • ja, da hast du sicher recht, jedoch liegt das warscheinlich nicht in unserer entscheidungskompetenz... :pfeif:

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Loipe
    es gibt keine andere Möglichkeit der Definition um sich das Umkopieren zu sparen.
    Das Umkopieren ist mir sowieso nicht ganz geheuer - die Werte nach dem Umkopieren sind doch nicht mehr aktuell !!!!

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Kleiner Einwurf von mir:


    Sofern man die möglichkeit hat sein Mapping von der SPS zum Rob selbst zugestalten, so das die zu
    durchlaufenden Variablen definiert liegen.
    könnte man doch auch direkt auf $IN[x] adressieren.
    Bei Boolschen Variablen recht einfach und für andere Variablen schreibt man sich kleine Funktionen
    Ich denke da ein Funktion wie:


    def ziPlateType(i:IN,wert:IN)
    int i,wert
    Switch i
    Case 1
    mapXtoY(100,107,wert)
    Case 2
    mapXtoY(108,115,wert)
    ....
    end
    So und die mapXtoY mappt die Zahl dann auf die ausgänge...



    wenn man sich die beiden Funktion ersteinmal zurechtgestrickt hat kannst du alle deine Programme
    in Windeseile mit einem kleinem Find and Replace Script anpassen...
    anstatt des Mapping kannst du auch alle Variablen vorher deklarieren.
    ODER LIEGE ICH FALSCH?

    Einmal editiert, zuletzt von soma ()

  • ansowas in der art hab ich auch schon gedacht nur ist das ja net die einzige variable
    und wann starte ich die Funktion. müsste sie dann schon mit nem interrupt aufrufen.


    in der art

    Code
    $CYCFLAG[xy]=(inSt1Type <> ziPlateType[1])
    INTERRUPT DECL  xy WHEN $CYCFLAG[xy] DO umKopieren(inSt1Type:IN,ziPlateType[1]:IN)


    muss ich mal in der art austesten


    Danke jedenfalls

  • na das gleiche, wobei es nur zu unterscheiden gilt ob sie boolsch oder nicht sind...
    weiß jetzt nicht, ob man bei kukarobsis boolsche logik auf integerwerte beziehen kann.
    was ich meine ist sowas wie
    int x=1
    if x then
    ;
    endif


    bei zahlenwerten aller art würde ich den grösst möglich datentyp bestimmen und genau diesen als rückgabewert
    einer funktion benutzen


    kenn jetzt den syntax nicht so aus kopf aber in etwa so:


    deffct Vars(i:IN)
    int i
    ; nu wieder der switch
    ;
    und dann
    return wert
    endfct


    schau einfach mal in die unterlagen wie man die rückgabe bzw funktionen definiert.
    ich denke es ist machbar.
    wenn du noch fragen hast frag einfach...

  • Mit Funktionen hab ich genug erfahrung.
    Mein Programm ist voll mit Funktionen.
    mit allen Datentypen als Übergabe- als auch Rückgabewert


    dafür brauch ich noch nichtmal die doku raus holen.
    du hast noch net verstanden was ich genau brauche.
    ich brauche variablen die immer aktuell gehalten werden nicht nur wenn ich sie direkt verwende.

    die eingänge, sowohl bool wie auch als integer signale vereinbart, müssen in variablen die im Array deklariert sind umkopiert werden damit die Modularität des Programms erhalten bleibt.


    Ausgänge machen mir überhaupt keine sorgen.


    es müssen auch net alle aktuell gehalten werden.
    irgendwas wird mir schon einfallen.


    schmeiße morgen mal den simulant an und teste was

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