Обмен и обработка информации по коммуникационным сетям в распределенных системах управления ASCII и Modbus, страница 4

Код программыв Master

Часть1 (Прием входных сигналов от Slave)

LD        1

[%MW20:=16#0106]   //01-код приема/передачи; 06- 6 байтов запроса (от %MW2 %MW4)   

[%MW21:=16#0300]   //03- смещение для полученных данных

[%MW22:=16#0101]      //Адресс Slave 01; 01- код функции (читать биты)

[%MW23:=16#0000]   //0000- от адресс Slave %M0

[%MW24:=16#0005]   //0005 – количество битов 5 (от %MW0 до %MW4)

LD                    1

AND     %MSG3.D

[EXCH3  %MW20:10]

//Биты записывают в %MW27-%MW29

//Вводим их в соответственные адрессы

LD        [%MW27=16#0100]

OR       [%MW27=16#0101]

ST        M_sen0

LD        [%MW27=16#0001]

OR       [%MW27=16#0101]

ST        M_sen1

LD        [%MW28=16#0100]

OR       [%MW28=16#0101]

ST        M_sen2

LD        [%MW28=16#0001]

OR       [%MW28=16#0101]

ST        M_card

LD        [%MW29=16#0100]

OR       [%MW29=16#0101]

ST        M_sbros

Часть 2 (Главная часть, для управления режимами.)

BLK      M_counter      //установка счетчика

LD        M_sbros

R

LD        M_IN

CU

LD        M_OUT

CD

END_BLK

--LD        [M_counter.V >=M_max]       //Если количество машин привышет мак. значения

ST        M_full                                     //перегрузка

S          M_doorClose                          //Дверь закрывается

R          M_doorOpen

R          M_shlak                                  // Шлагбаум закрывается

--BLK     M_PULSE                                 //установка таймера мигания светофоров

LDN     M_PU

IN

OUT_BLK

LD        Q

ST        M_PU

END_BLK

--LD        M_sen2           //если второй внутренний датчик достигаеся

ANDN  M_goON         //нет машины движится

S          M_OUTf          //начинается машина выходить

SR0                              //выполняется процесса выезд а автомобиля в процедуре SR0

--LD        M_CARD         //если есть жетон

ANDN M_goON                       //нет машины движится

S          M_INf              //начинается машина входить

SR1                              //Выполняется процесса въезда автомобиля в процедуре SR1

--LD        M_INf              //Если машина начинается входить

OR       M_OUTf          //или выходить

R          M_doorClose    //не закрывается дверь

R          M_green1       //не зеленый свет

R          M_green2

--BLK      M_TIMERO      //установка таймера открытия двери

LD        (M_INf

OR       M_OUTf

)

ANDN  M_doorOpen

IN

OUT_BLK

LD        Q

S          M_doorOpen

END_BLK

--LD        M_INf

OR       M_OUTf

ANDN  M_doorOpen

AND     [M_PULSE.V<=10]

S          M_red1                           //мигают светофоры красные пока открывается дверь

S          M_red2

--LD        M_INf

OR       M_OUTf

R          M_doorOpen

R          M_green1

R          M_green2

R          M_green3

R          M_shlak

--BLK      M_TIMERC      //Установка таймера закрытия двери

LDN     M_INf

ANDN  M_OUTf

ANDN  M_doorClose

IN

OUT_BLK

LD        Q

S          M_doorCLose

END_BLK

--LDN     M_INf                          //Если нет машины начинается движиться

ANDN  M_OUTf

ANDN  M_doorClose              //и дверь не закрыта

AND     [M_PULSE.V<=10]       // мигают светофоры красные пока закрывается дверь

S          M_red1

S          M_red2

--LD        M_doorOpen              //дверь уже открыта

AND     (M_OUTf                     //машина начинается выходить

OR       M_INf                          // или входить