Step 7 ModBus TCP Client

ziede

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
ich koennte eure Hilfe gebrauchen...
Ich "darf" mit einer S7 417 PN/DP H-Steuerung (hat einem extra CP 443-1 nur fuer ModBus TCP) von div. ModBus TCP Servern daten abholen.
Der ModBus TCP client (MODBUS/TCP CP Redundant) ist installiert und Lizensiert.
Von den ModBus TCP-Servern muessen ca. 200 Register abgeholt werden.
Da faengt jetzt mein Problem an, ich bekommen den Baustein nur dazu 125 Register abzuholen.
Ich habe (bis jetzt) versucht
- den Datenbereich komplett im Parameter DB anzugeben (ohne Erfolg)
- den Datenbereich im Parameter DB aufzuteilen (ohne Erfolg)
- diiverses an den Aufruf parametern des FB909 (MB_REDCL) geaendert (auch erfolglos).

evtl. habt ihr einen Tip fuer mich, was ich da verkehrt machen...

Der Aufruf:
Code:
      L     0
      T     "iDB_DMPM".R_PT_HAM_01.UNIT
      L     3
      T     "iDB_DMPM".R_PT_HAM_01.DATA_TYPE
      L     1
      T     "iDB_DMPM".R_PT_HAM_01.START_ADDRESs
      L     200
      T     "iDB_DMPM".R_PT_HAM_01.LENGTH
      CLR 
      =     "iDB_DMPM".R_PT_HAM_01.WRITE_READ

//preset Parameter
      L     1
      T     "MB_PARA_R_PT_HAM_01".data_type_2
      L     1004
      T     "MB_PARA_R_PT_HAM_01".db_2
      L     126
      T     "MB_PARA_R_PT_HAM_01".start_2
      L     250
      T     "MB_PARA_R_PT_HAM_01".end_2

      CALL  #iDB_R_PT_HAM_01
       db_param        :="MB_PARA_R_PT_HAM_01"
       REG_KEY_DB      :="MB_LICENSE_DB"
       check_conn_cycle:=T#5S
       use_all_conn    :=FALSE
       MONITOR         :=T#1S           // Monitoring time for data reception from link partner
       ENQ             :="iDB_DMPM".R_PT_HAM_01.ENQ    // Job triggered on positive edge
       UNIT            :="iDB_DMPM".R_PT_HAM_01.UNIT    // Unit identifier
       DATA_TYPE       :="iDB_DMPM".R_PT_HAM_01.DATA_TYPE    // Data type to be processed; 1= Coils; 2= Inputs; 3= Holding Reg; 4= Input Reg
       START_ADDRESS   :="iDB_DMPM".R_PT_HAM_01.START_ADDRESs    // MODBUS start address
       LENGTH          :="iDB_DMPM".R_PT_HAM_01.LENGTH    // Number of values to be processed
       WRITE_READ      :="iDB_DMPM".R_PT_HAM_01.WRITE_READ    // 0= Read access; 1= Write access
       id_0_a          :="iDB_DMPM".R_PT_HAM_01.id_0_a    // Connection ID for CPU/CP0, read from the parameter DB
       id_1_a          :="iDB_DMPM".R_PT_HAM_01.id_1_a    // Connection ID for CPU/CP1, read from the parameter DB
       id_0_b          :="iDB_DMPM".R_PT_HAM_01.id_0_b    // Connection ID for CPU/CP0, read from the parameter DB, only double-sided redund
       id_1_b          :="iDB_DMPM".R_PT_HAM_01.id_1_b    // Connection ID for CPU/CP1, read from the parameter DB, only double-sided redund
       LICENSED        :="iDB_DMPM".R_PT_HAM_01.LICENSED    // License status of the block: 1= licensed; 0= not licensed
       BUSY            :="iDB_DMPM".R_PT_HAM_01.busy    // Processing status AG_LSEND or AG_LRECV; 1= being processed; 0= not being proces
       DONE            :="iDB_DMPM".R_PT_HAM_01.DONE    // Activated job completed without errors on at least 1 connection
       ERROR           :="iDB_DMPM".R_PT_HAM_01.ERROR    // 1= An error has occurred on all connections
       STATUS_0A       :="iDB_DMPM".R_PT_HAM_01.STATUS_0A    // Status for connection 0A
       STATUS_1A       :="iDB_DMPM".R_PT_HAM_01.STATUS_1A    //  Status for connection 1A
       STATUS_0B       :="iDB_DMPM".R_PT_HAM_01.STATUS_0B    // Status for connection 0B
       STATUS_1B       :="iDB_DMPM".R_PT_HAM_01.STATUS_1B    // Status for connection 1B
       IDENT_CODE      :=
       RedErrS7        :="iDB_DMPM".R_PT_HAM_01.RedErrS7    // 1= Loss of redundancy at the S7 end
       RedErrDev       :="iDB_DMPM".R_PT_HAM_01.RedErrDev    // 1= Loss of redundancy at the communications partner end
       TotComErr       :="iDB_DMPM".R_PT_HAM_01.TotComErr    // 1= Complete communication failure
       Init_Error      :="iDB_DMPM".R_PT_HAM_01.Init_Error    // 1= An error occurred during initialization
       Init_Status     :="iDB_DMPM".R_PT_HAM_01.Init_Status    // Status of initialization
       Init            :="iDB_DMPM".R_PT_HAM_01.init    // Initialization on a positive edge


// start cyclic query

//     U     M      5.4
      FP    "iDB_DMPM".R_PT_HAM_01.FP_start_req
      UN    "iDB_DMPM".R_PT_HAM_01.init
      UN    "iDB_DMPM".R_PT_HAM_01.ENQ
      UN    "iDB_DMPM".R_PT_HAM_01.busy
      UN    "iDB_DMPM".R_PT_HAM_01.ERROR
      S     "iDB_DMPM".R_PT_HAM_01.ENQ



      U     "iDB_DMPM".R_PT_HAM_01.ENQ
      U     "iDB_DMPM".R_PT_HAM_01.DONE
      O     "iDB_DMPM".R_PT_HAM_01.init
      R     "iDB_DMPM".R_PT_HAM_01.ENQ

der Parameter DB:

Code:
double_sided_red        BOOL    FALSE
id_0_a                  WORD    W#16#1
id_1_a            WORD    W#16#1
laddr_0            WORD    W#16#3F5A
laddr_1            WORD    W#16#3F56
server_client        BOOL    FALSE
single_write        BOOL    FALSE
reserved        BYTE    B#16#0
data_type_1             BYTE    B#16#3
db_1            WORD    W#16#3EB
start_1            WORD    W#16#1
end_1            WORD    W#16#7D
data_type_2             BYTE    B#16#3
db_2            WORD    W#16#3EC
start_2            WORD    W#16#7E
end_2            WORD    W#16#FA
data_type_3             BYTE    B#16#0
...  
end_8            WORD    W#16#0
 
Hi,
mit 1 Modbus/TCP-Telegramm kann man nur max. 125 Register in 1 Aufruf packen, das ist so in der Spezifikation festgelegt.
Wenn Du mehr lesen willst, musst du es in 2 Aufträge aufteilen.
- im Parameter-DB 1 Bereich definieren für alle Deine 200 Register
- an den Runtimeparametern des Bausteins die ersten 125 Register lesen
- wenn das Telegramm fertig gelesen wurde die Runtimeparameter für die restlichen 75 Register ändern und wieder lesen

Für eine Auftrags-Liste kannst Du den Job_List-Baustein nehmen: https://support.industry.siemens.com/cs/ww/de/view/62830463

Snape
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Snape,

danke fuer die schnelle Hilfe.
Die Info mit der Jobliste hat mir das leben doch um einiges einfacher gemacht.
So habe ich meine Abfrage zu meiner zufriedenheit hinbekommen.
 
Zurück
Oben