Codesys (824048), страница 60
Текст из файла (страница 60)
Приодновременном вызове одной и той же строковой функции из нескольких параллельных процессоввозможно нарушение ее работы (перекрытие данных).LENВозвращает длину строки.Аргумент STR типа STRING, возвращаемое значение типа INT.Пример IL:LD'SUSI'LENSTVarINT1 (* Результат: 4 *)Пример FBD:Пример ST:VarSTRING1 := LEN (‘SUSI’);LEFTВозвращает левую значимую часть строки заданной длины.Входная строка STR типа STRING, размер SIZE типа INT, возвращаемое значение STRING.LEFT (STR, SIZE) означает: взять первых SIZE символов от строки STR.Пример IL:LD'SUSI'LEFT3STVarSTRING1(* Результат ‘SUS’ *)Пример FBD:Пример ST:VarSTRING1 := LEFT (‘SUSI’,3);CoDeSys V2.310-44Приложение D: Библиотеки CoDeSysRIGHTВозвращает правую значимую часть строки заданной длины.Входная строка STR типа STRING, размер SIZE типа INT, возвращаемое значение STRING.RIGHT (STR, SIZE) означает: взять последних SIZE символов от строки STRПример IL:LD'SUSI'RIGHT3STVarSTRING1(*Результат: ‘USI’ *)Пример FBD:Пример ST:VarSTRING1 := RIGHT (‘SUSI’,3);MIDВозвращает часть строки с указанной позиции указанной длины.Входная строка STR типа STRING, размер LEN и POS типа INT, возвращаемое значение STRING.MID (STR, LEN, POS) означает: вырезать LEN символов из STR строки, начиная с POS.Пример IL:LD'SUSI'RIGHT2,2STVarSTRING1(* Результат: ‘US’ *)Пример FBD:Пример ST:VarSTRING1 := MID (‘SUSI’,2,2);CONCATКонкатенация (объединение) двух строк.Обе входных строки STR1 и STR2 как и результат типа STRING.Пример IL:CoDeSys V2.3LD'SUSI'CONCAT‘WILLI’STVarSTRING1(* Результат: ‘SUSIWILLI’ *)10-45Приложение D: Библиотеки CoDeSysПример FBD:Пример ST:VarSTRING1 := CONCAT (‘SUSI’,’WILLI’);Обратите внимание: Функция CONCAT не работает при более чем 5 вложениях.INSERTINSERT вставляет строку в указанную позицию другой строки.Входные переменные STR1 и STR2 - типа STRING, POS - типа INT, возвращаемое значение - строкаSTRING.INSERT(STR1, STR2, POS) означает: вставить STR2 в STR1 в позиции POS.Пример IL:LD'SUSI'INSERT‘XY’,2STVarSTRING1(* Результат: ‘SUXYSI’ *)Пример FBD:Пример ST:VarSTRING1 := INSERT (‘SUSI’,’XY’,2);DELETEDELETE удаляет часть строки с указанной позиции.Входные переменные STR типа STRING, LEN и POS типа INT, возвращаемое значение строкаSTRING.DELETE(STR, L, P) означает: удалить L символов из STR, начиная с позиции P.Пример IL:LD'SUXYSI'DELETE2,23STVar1(* Результат: ‘SUSI’ *)Пример FBD:CoDeSys V2.310-46Приложение D: Библиотеки CoDeSysПример ST:Var1 := DELETE (‘SUXYSI’,2,3);REPLACEREPLACE заменяет часть строки другой строкой с указанной позиции заданной длины.Входные переменные STR1 и STR2 типа STRING, LEN и POS типа INT, возвращаемое значение строка STRING.REPLACE(STR1, STR2, L, P) означает: заменить L символов строки STR1 на STR2 начиная с позицииP.Пример IL:LD'SUXYSI'REPLACE'K', 2,2STVarSTRING1(* Результат: ‘SKYSI’ *)Пример FBD:Пример ST:VarSTRING1 := REPLACE (‘SUXYSI’,’K’,2,2);FINDFIND ищет заданный контекст в строке.Входные переменные STR1 и STR2 типа STRING, возвращаемое значение INT.FIND(STR1, STR2) означает: найти позицию в строке STR1, где впервые встречается подстрока STR2.Нумерация позиций в строке начинается с 1.
Если STR2 не найдена, STR1 возвращает 0.Пример IL:LD'SUXYSI'FIND 'XY'STVarINT1(* Результат: ‘3’ *)Пример FBD:Пример ST:CoDeSys V2.310-47Приложение D: Библиотеки CoDeSysVarINT1 := FIND (‘SUXYSI’,’XY’);10.16.2 ПереключателиSRПереключатель с доминантой включения:Q1 = SR (SET1, RESET) означает:Q1 = (NOT RESET AND Q1) OR SET1Входные переменные SET1 и RESET - как и выходная переменная Q1 типа BOOL.Пример объявления:SRInst : SR ;Пример IL:CALSRInst(SET1 := VarBOOL1, RESET := VarBOOL2)LDSRInst.Q1STVarBOOL3Пример FBD:Пример ST:SRInst(SET1:= VarBOOL1 , RESET:=VarBOOL2 );VarBOOL3 := SRInst.Q1 ;RSПереключатель с доминантой выключения:Q1 = RS (SET, RESET1) означает:Q1 = NOT RESET1 AND (Q1 OR SET)Входные переменные SET и RESET1 - как и выходная переменная Q1 типа BOOL.Пример объявления:RSInst : RS ;Пример IL:CALRSInst(SET := VarBOOL1, RESET1 := VarBOOL2)LDRSInst.Q1STVarBOOL3Пример FBD:CoDeSys V2.310-48Приложение D: Библиотеки CoDeSysПример ST:RSInst(SET:= VarBOOL1 , RESET1:=VarBOOL2 );VarBOOL3 := RSInst.Q1 ;SEMAПрограммный семафор.BUSY = SEMA(CLAIM, RELEASE) означает:BUSY := X;IF CLAIM THEN X:=TRUE;ELSE IF RELEASE THEN BUSY := FALSE; X:= FALSE;END_IFX - это внутренняя BOOL переменная, изначально имеющая значение FALSE.Входные переменные CLAIM и RELEASE - как и выходная переменная BUSY типа BOOL.
(CLAIM –запрос захвата, RELEASE - освобождение)Семафор предназначен для организации асинхронного доступа к одному аппаратному ресурсу. Еслипри вызове семафора с CLAIM = TRUE возвращаемое значение BUSY = FALSE, то ресурс свободен(запрашивается впервые или уже освобожден вызовом RELEASE = TRUE). Возвращаемое значениеBUSY = FALSE, это означает, что ресурс занят.Пример объявления:SEMAInst : SEMA ;Пример IL:CALSEMAInst(CLAIM := VarBOOL1, RELEASE := VarBOOL2)LDSEMAInst.BUSYSTVarBOOL3Пример FBD:Пример ST:SEMAInst(CLAIM:= VarBOOL1 , RELEASE:=VarBOOL2 );VarBOOL3 := SEMAInst.BUSY;10.16.3 Детекторы импульсовR_TRIGФункциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала.CoDeSys V2.310-49Приложение D: Библиотеки CoDeSysFUNCTION_BLOCK R_TRIGVAR_INPUTCLK : BOOL;END_VARVAR_OUTPUTQ : BOOL;END_VARVARM : BOOL := FALSE;END_VARQ := CLK AND NOT M;M := CLK;END_FUNCTION_BLOCKВыход Q равен FALSE до тех пор, пока вход CLK равен FALSE.
Как только CLK получает значениеTRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из FALSEв TRUE.Пример объявления:RTRIGInst : R_TRIG ;Пример IL:CALRTRIGInst(CLK := VarBOOL1)LDRTRIGInst.QSTVarBOOL2Пример FBD:Пример ST:RTRIGInst(CLK:= VarBOOL1);VarBOOL2 := RTRIGInst.Q;F_TRIGФункциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала.FUNCTION_BLOCK F_TRIGVAR_INPUTCLK: BOOL;END_VARVAR_OUTPUTQ: BOOL;END_VARCoDeSys V2.310-50Приложение D: Библиотеки CoDeSysVARM: BOOL := FALSE;END_VARQ := NOT CLK AND NOT M;M := NOT CLK;END_FUNCTION_BLOCKВыход Q равен FALSE до тех пор, пока вход CLK равен TRUE. Как только CLK получает значениеFALSE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из TRUEв FALSE.Пример объявления:FTRIGInst : F_TRIG ;Пример IL:CALFTRIGInst(CLK := VarBOOL1)LDFTRIGInst.QSTVarBOOL2Пример FBD:Пример ST:FTRIGInst(CLK:= VarBOOL1);VarBOOL2 := FTRIGInst.Q;10.16.4СчетчикиCTUФункциональный блок ‘инкрементный счетчик’.Входы CU, RESET и выход Q типа BOOL, вход PV и выход CV типа WORD.По каждому фронту на входе CU (переход из FALSE в TRUE) выход CV увеличивается на 1.
Выход Qустанавливается в TRUE, когда счетчик достигнет значения заданного PV. Счетчик CV сбрасывается в0 по входу RESET = TRUE.Пример объявления:CTUInst : CTU ;Пример IL:CoDeSys V2.3CALCTUInst(CU := VarBOOL1, RESET := VarBOOL2, PV := VarINT1)LDCTUInst.QSTVarBOOL3LDCTUInst.CV10-51Приложение D: Библиотеки CoDeSysSTVarINT2Пример FBD:Пример ST:CTUInst(CU:= VarBOOL1, RESET:=VarBOOL2 , PV:= VarINT1);VarBOOL3 := CTUInst.Q ;VarINT2 := CTUInst.CV;CTDФункциональный блок ‘декрементный счетчик’.Входы CD, LOAD и выход Q типа BOOL, вход PV и выход CV типа WORD.По каждому фронту на входе CD (переход из FALSE в TRUE) выход CV уменьшается на 1.
Когдасчетчик достигнет 0, счет останавливается, выход Q переключается в TRUE. Счетчик CV загружаетсяначальным значением, равным PV по входу LOAD = TRUE.Пример объявления:CTDInst : CTD ;Пример IL:CALCTDInst(CD := VarBOOL1, LOAD := VarBOOL2, PV := VarINT1)LDCTDInst.QSTVarBOOL3LDCTDInst.CVSTVarINT2Пример FBD:Пример ST:CTDInst(CD:= VarBOOL1, LOAD:=VarBOOL2 , PV:= VarINT1);VarBOOL3 := CTDInst.Q ;VarINT2 := CTDInst.CV;CTUDФункциональный блок ‘инкрементный / декрементный счетчик’.Входы CU, CD, RESET, LOAD и выходы QU и QD типа BOOL, PV и CV типа WORD.По входу RESET счетчик CV сбрасывается в 0, по входу LOAD загружается значением PV.CoDeSys V2.310-52Приложение D: Библиотеки CoDeSysПо фронту на входе CU счетчик увеличивается на 1.
По фронту на входе CD счетчик уменьшается на 1(до 0).QU устанавливается в TRUE, когда CV больше или равен PV.QD устанавливается в TRUE, когда CV равен 0.Пример объявления:CTUDInst : CUTD ;Пример IL:CALCTUDInst(CU := VarBOOL2, RESET := VarBOOL3, LOAD :=VarBOOL4, PV := VarINT1)LDCTUDInst.QUSTVarBOOL5LDCTUDInst.QDSTVarBOOL6LDCTUDInst.CVSTVarINT2Пример FBD:Пример ST:CTUDInst(CU := VarBOOL1, CU:= VarBOOL2, RESET := VarBOOL3,LOAD:=VarBOOL4 , PV:= VarINT1);VarBOOL5 := CTUDInst.QU ;VarBOOL6 := CTUDInst.QD ;VarINT2 := CTUDInst.CV;10.16.5ТаймерыTPФункциональный блок ‘таймер’.TP(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно.
Выходы Q и ET аналогичнотипов BOOL и TIME.Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до достижениядлительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по фронту входа IN.Временная диаграмма работы TP:CoDeSys V2.310-53Приложение D: Библиотеки CoDeSysПример объявления:TPInst : TP;Пример IL:CALTPInst(IN := VarBOOL1, PT := T#5s)LDTPInst.QSTVarBOOL2Пример FBD:Пример ST:TPInst(IN := VarBOOL1, PT:= T#5s);VarBOOL2 :=TPInst.Q;TONФункциональный блок ‘таймер с задержкой включения’.TON(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогичнотипов BOOL и TIME.Пока IN равен FALSE, выход Q = FALSE, выход ET = 0.
Как только IN становится TRUE, начинаетсяотсчет времени (в миллисекундах) на выходе ET до значения, равного PT. Далее счетчик не увеличивается. Q равен TRUE, когда IN равен TRUE и ET равен PT, иначе FALSE. Таким образом, выход Qустанавливается с задержкой PT от фронта входа IN.Временная диаграмма работы TON:Пример объявления:TONInst : TON ;Пример IL:CoDeSys V2.310-54Приложение D: Библиотеки CoDeSysCAL TONInst(IN := VarBOOL1, PT := T#5s)LD TONInst.QST VarBOOL2Пример FBD:Пример ST:TONInst(IN := VarBOOL1, PT:= T#5s);TOFФункциональный блок ‘таймер с задержкой выключения’.TOF(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогичнотипов BOOL и TIME.Если IN равен TRUE, то выход Q = TRUE и выход ET = 0. Как только IN переходит в FALSE, начинается отсчет времени (в миллисекундах) на выходе ET.
При достижении заданной длительности отсчетостанавливается. Выход Q равен FALSE, если IN равен FALSE и ET равен PT, иначе - TRUE.Таким образом, выход Q сбрасывается с задержкой PT от спада входа IN.Временная диаграмма работы TOF:Пример объявления:TOFInst : TOF ;Пример IL:CALTOFInst(IN := VarBOOL1, PT := T#5s)LDTOFInst.QSTVarBOOL2Пример FBD:Пример ST:TOFInst(IN := VarBOOL1, PT:= T#5s);VarBOOL2 :=TOFInst.Q;CoDeSys V2.310-55Приложение D: Библиотеки CoDeSysRTCФункциональный блок ‘часы реального времени’. После установки начального значения, RTC выдаеттекущие время и дату.RTC(EN, PDT, Q, CDT) Входы EN и PDT, выходы Q и CDT типов BOOL и DATE_AND_TIME соответственно.Пока EN равен FALSE, выход Q равен FALSE и CDT равен DT#1970-01-01-00-00:00:00.При включении EN = TRUE в часы загружается время PD и начинается отсчет времени.