cp400 as modbus rtu slave

Upload: jordane-goulart

Post on 06-Jul-2018

243 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/17/2019 CP400 as Modbus RTU Slave

    1/6

    001 PROGRAM PLC_PRG

    002 VAR

    003 END_VAR

    004 (*Demo program-CP terminal as slave CP_as_Modbus_RTU_slave.pro - AC500 program

    005 CP_slave2.V6F and CP_slave3.V6F - CP440 programs

    006

    007 Main purpose: how to handle Modbus RTU communication using step chain ( in ST in this example )

    008

    009 Modbus RTU master : COM1 - PM571

    010 Modbus RTU slaves: CP440 - slave2 and CP 440 slave 3

    011 RS485, 19200, 8 1, even

    012 The CP440 programs are identical, they consist of:013 Screen 1: 3 actual values from the CPU, Screen 2: 2 actual values from the CPU

    014 Screen 1: 2 set values to the CPU, Screen 2: 3 set values to the CPU

    015 The communication consist of:

    016 - writing 5 set values to slave 2 and slave3

    017 - reading 5 actual values and the screen number from slave 2 and slave 3

    018

    019 *)

    001

    CP_communication

    002

    done_master

    COM_MOD_MAST

    RTU_Master

    EN

    COM

    SLAVE

    FCT

    TIMEOUT

    ADDR

    NB

    DATA

    DONE

    ERR

    ERNO

    err_master

    erno_master

    en_master

    1

    slave_CP

    FCT_CP

    1000

    ADDR_CP

    NB_CP

    ADR

    DATA_CP

  • 8/17/2019 CP400 as Modbus RTU Slave

    2/6

    001 PROGRAM CP_communication

    002 VAR

    003 END_VAR

    001

    002 (*-----------S L A V E 2-------------------------------------------------------------------------------------------------*)

    003 (*write five words to slave2 = screen 1 and 2, actual values 1,2 3,4,5*)

    004

    005 (*request*)

    006 IF CHAIN=0 AND NOT done_master THEN

    007 CHAIN:=100;

    008 en_master:=TRUE;

    009 slave_CP:=2;010 FCT_CP:=16;

    011 ADDR_CP:=0;

    012 write_all_screens_data:=write_all_screens_slave2;

    013 NB_CP:=5;

    014 END_IF

    015

    016 (*reply*)

    017 IF CHAIN=100 AND done_master THEN

    018 CHAIN:=200;

    019 en_master:=FALSE;

    020 END_IF

    021

    022 (*read six words from slave2 - screen 1 and 2, set values 1,2,3,4,5. In the sixth word is the actual screen number*)

    023

    024 (*request*)

    025 IF CHAIN=200 AND NOT done_master THEN

    026 CHAIN:=300;

    027 en_master:=TRUE;

    028 slave_CP:=2;

    029 FCT_CP:=4;

    030 ADDR_CP:=20;

    031 NB_CP:=6;

    032 END_IF

    033

    034 (*reply*)035 IF CHAIN=300 AND done_master THEN

    036 CHAIN:=400;

    037 read_all_screens_data_slave2:=read_all_screens;

    038 en_master:=FALSE;

    039 END_IF

    040

    041 (*-----------S L A V E 3-------------------------------------------------------------------------------------------------*)

    042 (*write five words to slave3 = screen 1 and 2, actual values 1,2 3,4,5*)

    043

    044 (*request*)

    045 IF CHAIN=400 AND NOT done_master THEN

    046 CHAIN:=500;047 en_master:=TRUE;

    048 slave_CP:=3;

    049 FCT_CP:=16;

    050 ADDR_CP:=10;

    051 write_all_screens_data:=write_all_screens_slave3;

    052 NB_CP:=5;

    053 END_IF

    054

    055 (*reply*)

    056 IF CHAIN=500 AND done_master THEN

    057 CHAIN:=600;

    058 en_master:=FALSE;

    059 END_IF

    060

    061 (*read six words from slave3 - screens 1 and 2, set values 1,2,3,4,5. In the sixth word is the actual screen number*)

    062

    063 (*request*)

  • 8/17/2019 CP400 as Modbus RTU Slave

    3/6

    064 IF CHAIN=600 AND NOT done_master THEN

    065 CHAIN:=700;

    066 en_master:=TRUE;

    067 slave_CP:=3;

    068 FCT_CP:=4;

    069 ADDR_CP:=30;

    070 NB_CP:=6;

    071 END_IF

    072

    073 (*reply*)

    074 IF CHAIN=700 AND done_master THEN

    075 CHAIN:=0;076 read_all_screens_data_slave3:=read_all_screens;

    077 en_master:=FALSE;

    078 END_IF

    079

    080 (*communication error*)

    081 IF err_master THEN

    082 error_CP:=erno_master;

    083 END_IF

    084

  • 8/17/2019 CP400 as Modbus RTU Slave

    4/6

    001 VAR_GLOBAL

    002

    003 RTU_Master: COM_MOD_MAST;

    004 done_master: BOOL;

    005 err_master: BOOL;

    006 erno_master: WORD;

    007 en_master: BOOL;

    008 slave_CP: BYTE;

    009 FCT_CP: BYTE;

    010 ADDR_CP: BYTE;

    011 NB_CP: WORD;

    012 DATA_CP AT %MW0.100: WORD;013 error_CP: WORD;

    014 CHAIN: WORD;

    015

    016 read_all_screens AT %MW0.100: ARRAY [1..6] OF WORD;

    017 write_all_screens_data AT %MW0.100: ARRAY [1..5] OF WORD;

    018

    019 write_all_screens_slave2: ARRAY [1..5] OF WORD := 0,1,2,3,4;

    020 read_all_screens_data_slave2: ARRAY [1..6] OF WORD;

    021 write_all_screens_slave3: ARRAY [1..5] OF WORD := 10,11,12,13,14;

    022 read_all_screens_data_slave3: ARRAY [1..6] OF WORD;

    023

    024

    025 END_VAR

  • 8/17/2019 CP400 as Modbus RTU Slave

    5/6

      CP as Modbus RTU slave

    W0

    0

    actual value1

    W1

    1

    actual value 2

    W1

    1

    actual value 2

    W2

    2

    actual value 3

    W2

    2

    actual value 3

    W3

    3

    actual value 4

    W3

    3

    actual value 4

    W 4

    4

    actual value 5

    W 4

    4

    actual value 5

    W20

    0

    set value1

    W21

    0

    set value2

    W22

    0

    set value3

    W23

    0

    set value4

    W24

    0

    set value5

    Screen 1 –S lave 2

    Screen 2 – Slave 2 W25 = status block

    W5 = control block

    W10

    0

    actual value1

    W11

    0

    actual value 2

    W11

    0

    actual value 2

    W12

    0

    actual value 3

    W12

    0

    actual value 3

    W13

    0

    actual value 4

    W13

    0

    actual value 4

    W14

    0

    actual value 5

    W14

    0

    actual value 5

    W30

    10

    set value1

    W31

    11

    set value2

    W32

    12

    set value3

    W33

    13

    set value4

    W34

    14

    set value5

    Screen 1 –S lave 3

    Screen 2 – Slave 3 W35 = status block

    W15 = control block

    CP440 - SLAVE 2

    CP440 - SLAVE 3

    AC500 CPU as Modbus RTU master with two CP440 as Modbus RTU slaves  

  • 8/17/2019 CP400 as Modbus RTU Slave

    6/6

    AC500 CPU

    Modbus RTU Master

    COM 1

    1

    2

    3

    4

    1

    6

    CP440 – slave 2

    1

    6

    CP440 – slave 3

    RS 485, 19200, 8, 1 even

    request

    reply