Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: beliebigen Command (Char) übergeben

  1. #1
    Registriert seit
    07.08.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein kleines/großes Problem. Meine Erfahrung ist sehr gering in solchem Bereich.


    Ich habe einen Barcode-Leser an einer CP340 angeschlossen. Über P_SEND schicke ich einen Command (z.B. '1' für Start).
    Diese 1 wird in ein STAT Array[1..8] of char übergeben und an den Scanner gesendet.

    Code:
    data[1]=1
    ..
    data[8]=$r // "$r" = Abschlusscommand.
    Soweit so gut. Klappt alles.



    Problemstellung:

    Der FB in dem P_SEND und P_RCV bearbeitet werden (Multiinstanzen) wird im FCx aufgerufen.

    Code:
          CALL  FBx , DBx
           iLADDR       :=xxx
           bStart       :=M2.0
           iWorkDB      :=xxx
           iCommand     :='1' 
           bOK          :=M2.1
           bNOK         :=M2.2
           bScanFinished:=M2.3
           bNewData     :=M2.4

    Jetzt möchte ich aber für '1' z.B. 'START' eingeben.
    Wie kriege ich dann die einzelnen Chars in das array[1..8]?

    Also:

    Bei Übergabe vom Char '1' sieht das Array[1..8] of char so aus:
    Code:
    data[1]='1'
    .
    .
    data[8]='$r'
    Bei Übergabe vom Char 'START' soll das Array[1..8] of char so aussehen:

    Code:
    data[1]='S'
    data[2]='T'
    data[3]='A'
    data[4]='R'
    data[5]='T'
    .
    .
    data[8]='$r'

    Welches Datenformat muss #iCommand haben (in der Schnittestelle des FB´s als IN) damit ich 'START' übergeben kann?

    Ich denke da muss mit indirekter Adressierung gearbeitet werden?
    Leider hab ich noch keine Ahnung von.

    Für einen gut Rat bzw. Denkanstoß wäre ich sehr dankbar.
    Danke.


    Mfg Tobi
    Geändert von tobi_w (15.08.2008 um 11:32 Uhr)
    Zitieren Zitieren beliebigen Command (Char) übergeben  

  2. #2
    Registriert seit
    12.08.2006
    Beiträge
    67
    Danke
    0
    Erhielt 69 Danke für 6 Beiträge

    Standard

    Probier einfach deine Stings vorher in einem DB zu hinterlegen und Sie mit der SFC20 blkmov in den Ausgabestring zu kopieren.

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo Tobi,
    wenn ich dich richtig verstehe, dann soll das Kommando "Start" (z.B.) als direkt-Übergabe am IN-Parameter deines FC (FB) stehen ...
    Wenn ja, das geht leider nicht. Du kannst einem Baustein zwar durchaus einen String (Zeichenkette) als Parameter übergeben, nur muss dieser schon vorher irgendwo zugewiesen sein. An den Baustein wird letztlich nämlich nicht der Inhalt, sondern ein Pointer auf die Speicherstelle mit dem Inhalt übergeben.

    Gruß
    LL

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Man kann ja dieses Array in einem Global-DB anlegen und dann mit 8 Lade/Transferbefehlen die Char in das Array kopieren, je nachdem, welcher Befehl ausgeführt werden soll.

    Oder wie Hartmut vorschlägt, in diesem Global-DB gleich noch die möglichen/gewünschten Kommandos ebenfalls als Array eingeben und diese dann umkopieren mit SFC20.

    Bzw. nicht 8. sondern 2:
    Code:
          L     'Star'
          T     DB10.DBD    0  //Array 1-4
          L     't   '
          T     DB10.DBD    4  //Array 5-8
    PS: welches Zeichen genau bist $r ? Das hab ich hier mal weggelassen.
    Geändert von Ralle (15.08.2008 um 15:57 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    Registriert seit
    19.01.2007
    Ort
    Ruhrpott-West
    Beiträge
    383
    Danke
    97
    Erhielt 99 Danke für 74 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    PS: welches Zeichen genau bist $r ? Das hab ich hier mal weggelassen.
    $r steht für Carriage Return (dez: 13, hex: 0D), wird so bei S7 angezeigt, wenn man die Anzeige auf Zeichen bzw. CHAR stehen hat.

    @Tobi
    Ich habe die zu senden Daten, wie schon von Hartmut erwähnt, in DBs geschrieben und weise je nach Fall den DB, die Startadresse und die Länge zu. (s. Beispiel).

    Code:
         CLR   
          =     "(send BC data)"
          U     "(Label iO)"
          U     "M40.2"
          SPBN  m001
          L     300
          T     #DB_No
          L     204
          T     #DBB_No
          L     181
          T     #LEN
          SET   
          =     "(send BC data)"
    m001: NOP   0
          U     "(Label niO)"
          U     "M40.2"
          SPBN  m002
          L     304
          T     #DB_No
          L     176
          T     #DBB_No
          L     160
          T     #LEN
          SET   
          =     "(send BC data)"
    m002: NOP   0
          U     "(Label Muster)"
          U     "M40.2"
          SPBN  m003
          L     303
          T     #DB_No
          L     64
          T     #DBB_No
          L     66
          T     #LEN
          SET   
          =     "(send BC data)"
    ...
     
             CALL  #BCP_Send
           REQ   :="(send BC data)"
           R     :="FALSE"
           LADDR :=400
           DB_NO :=#DB_No
           DBB_NO:=#DBB_No
           LEN   :=#LEN
           DONE  :=#Done
           ERROR :=#error
           STATUS:=#status
          NOP   0
    Ich denke in Deinem Fall wird ein DB reichen. Die Länge dürfte auch jedesmal 8 sein. Musst also nur zusehen, daß am Ende das '$r' steht.
    Es ist schon alles gesagt worden - nur noch nicht von jedem!

  6. #6
    tobi_w ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Anworten. Habe es jetzt mit SFC20 gelöst - auch wenn es nicht wirklich das wahre ist.

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Geht ja auf jeden Fall, aber wie ich schon schrieb, für 8 Byte muß man nicht unbedingt den SFC20 bemühen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Du kannst die Zeichenfolge als String übergeben, und dann in deinem FC eine AT-Sicht mit einem Char-array anlegen, etwa so:

    Code:
    VAR_INPUT
        I_sSendString   :String[8];
    END_VAR
    
    VAR_TEMP
    
        T_hSendArray AT I_sSendString: STRUCT
            bActLen  :BYTE;
            bMaxLen :BYTE;
            hData     :ARRAY[1..8] OF CHAR; 
        END_STRUCT;
    
    END_VAR
    dann hast du die Zeichen dann in deinem Char Array T_hSendArray.hData[1..8].

    Oder du kann auch gleich ein Char-Array übergeben, oder du machst dir einen udt....

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Chefmech Beitrag anzeigen
    Du kannst die Zeichenfolge als String übergeben, und dann in deinem FC eine AT-Sicht mit einem Char-array anlegen, etwa so:

    Code:
    VAR_INPUT
        I_sSendString   :String[8];
    END_VAR
    
    VAR_TEMP
    
        T_hSendArray AT I_sSendString: STRUCT
            bActLen  :BYTE;
            bMaxLen :BYTE;
            hData     :ARRAY[1..8] OF CHAR; 
        END_STRUCT;
    
    END_VAR
    dann hast du die Zeichen dann in deinem Char Array T_hSendArray.hData[1..8].

    Oder du kann auch gleich ein Char-Array übergeben, oder du machst dir einen udt....
    Aber darum gings ja eigentlich nicht, eher darum, diesen String variabel zu übergeben.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #10
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Worum gings dann????

    du kannst jetzt bei jedem FB / FC aufruf eine String übergeben, der zur jeweiligen Zeit gesendet werden soll...

    um was gings denn genau??? Lesen ist Glücksache

Ähnliche Themen

  1. Einstellung Qualifier in Single command
    Von Netwalker im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 02.09.2016, 10:23
  2. "Not Enougth Memory for Command"
    Von JRMBerg im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 11.06.2012, 08:38
  3. SINAMICS - beliebigen Parameter auslesen ?
    Von moeins im Forum Antriebstechnik
    Antworten: 5
    Letzter Beitrag: 14.05.2008, 08:00
  4. Array mit Char an FC übergeben?
    Von Ingo im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.12.2007, 16:07
  5. Antworten: 2
    Letzter Beitrag: 13.07.2003, 12:07

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •