TIA Modbus 1500er mit et200s rtu

smilie108

Level-2
Beiträge
41
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Brauche mal ein bischen hilfe. Hab eine 1511 er steuerung und eine 6ES7 138-4DF11-0AB0 1Si karte. Lese damit einen WR aus ( Azzurro ) mit funktionscode 16#03 klappe s auch wunderbar bekomme auch als response alle werte habe das ganze sogra ls abfragekette mit einem baustein gemacht dem ich werte zuweisen kann.
Jeztt aber der pukt
Ich müsste mit 16#16 (Funktionscode 16 werte in den WR schreiben aber da verstehe ich derzeit mal wieder das testprojekt von siemens nicht. ich kopiere mit block move die werte in den send work db und auch funktinscode wird richtig eingetragen bekomme aber diverse fehler von funktionscoe falsch usw. die baugruppe sollte aber 16 können.
Hat das schon maljemand gemacht oder hat ein beispiel für mich vileicht seh ich mal wieder den wald vor lauter bäumen nicht.

L #Register_adresse_Start
T "SEND_SRC_DB_SI_0".bit_start_adr
L #Ziel_Modbus_adresse
T "SEND_SRC_DB_SI_0".slave_address
L #Funktionscode
T "SEND_SRC_DB_SI_0".function_code
L #Anzahl_Werte_senden
T "SEND_SRC_DB_SI_0".bit_count

CALL MOVE_BLK_VARIANT
SRC :="Senden Azzurro 1".a
COUNT :=13
SRC_INDEX :=1
DEST_INDEX :=1
Ret_Val :="Data"."Ret_val blk move 9"

// Setze Senden wenn alles ok
U #start
UN "SEND_WORK_DB_SI_0".S_SEND_SI_REQ//SEND_REQ
UN "SEND_WORK_DB_SI_0".S_SEND_SI_DONE//SEND_DONE
UN "SEND_WORK_DB_SI_0".S_SEND_SI_ERROR//SEND_ERROR
S "SEND_WORK_DB_SI_0".S_SEND_SI_REQ//Set SEND_REQ

// ------------------------
// Generate edge SEND_REQ
// ------------------------
// Senden Rücksetzen bei Fehler
U(
O "SEND_WORK_DB_SI_0".S_SEND_SI_DONE//SEND_DONE
O "SEND_WORK_DB_SI_0".S_SEND_SI_ERROR//SEND_ERROR
O "RECV_WORK_DB_SI_0".S_RECV_SI_ERROR
)
U "SEND_WORK_DB_SI_0".S_SEND_SI_REQ//SEND_REQ
R "SEND_WORK_DB_SI_0".S_SEND_SI_REQ//SEND with REQ=0

// ------------------------
// Supply LEN
// ------------------------

L 16#0006 //Length SEND-Data (for FC01)
// L "Data".Sendelenge
T "SEND_WORK_DB_SI_0".S_SEND_SI_WORK_LEN//SEND LEN

// ------------------------
// SEND with Instance-DB
// ------------------------
T #_Accu1Safes
L "SEND_WORK_DB_SI_0".S_SEND_SI_WORK_DB_NO
T #Migras_DB_NO

CALL S_SEND , "SEND_IDB_SI_0"
REQ :="SEND_WORK_DB_SI_0".S_SEND_SI_REQ
R :="SEND_WORK_DB_SI_0".S_SEND_SI_R
LADDR :=#"HW_Adresse des Modbus modules"
DB_NO :=#Migras_DB_NO
DBB_NO :="SEND_WORK_DB_SI_0".S_SEND_SI_WORK_DBB_NO
LEN :="SEND_WORK_DB_SI_0".S_SEND_SI_WORK_LEN
DONE :="SEND_WORK_DB_SI_0".S_SEND_SI_DONE
ERROR :="SEND_WORK_DB_SI_0".S_SEND_SI_ERROR
STATUS :="SEND_WORK_DB_SI_0".S_SEND_SI_WORK_STAT
COM_RST :="SEND_WORK_DB_SI_0".S_SEND_SI_COM_RST
L #_Accu1Safes

// -------------------------------





DEST :="SEND_WORK_DB_SI_0".S_SEND_SI_WORK_DB

kann auch bei bedarf das projekt zippen und schicken
 

Anhänge

  • test modbus_20221201_1850.zip
    1,9 MB · Aufrufe: 1
Servus,

hast du schonmal 16#10 bzw. einfach 16 als Funktionscode probiert?
Ich denke die 16 sind dezimal und nicht hexadezimal zu interpretieren, bei 3 macht es keinen Unterschied, bei 16 leider schon.
 
Zuletzt bearbeitet:
Zurück
Oben