cfManagedBase 라이브러리에는 IEC61131-3 프로그래머블 로직 콘트롤러 국제 규격에 준하는 기능들이 다수 포함되어 있습니다.
사용할 수 있는 최대 타이머 갯수는 50개입니다. (0~49까지 사용가능) 라이브러리 파일에 있는 timerMaxLimit를 수정하면 더 사용할 수 있습니다.
라이브러리 안에 이런 내용이 들어있습니다. 이 코드를 여러분의 소스안에 넣을 필요는 없습니다.
#define timerMaxLimit 50 uint8_t Tstat[timerMaxLimit]; // Timer status uint32_t Tvalue[timerMaxLimit]; // Timer Current Value
Tstat[타이머번호] 배열에는 각 타이머의 상태가 저장됩니다. Tvalue[타이머번호]에는 각 타이머의 현재 값이 저장됩니다.
정해준 시간이 지나면 On되는 타이머입니다.
void onTimer(입력소스, 타이머 번호, 경과시간)
입력 소스 : 타이머 시작입력 |
타이머 번호 : 사용할 타이머 번호 |
경과시간 : 타이머 mS(밀리초) 값입니다. 8은 0.8S를 뜻합니다. |
void logic_proc() { onTimer(X00,0,20); // 2Sec On Timer Y01 = Tstat[0]; // Watch Tvalue }
시작과 동시에 On되고, 입력신호가 꺼지면 정해준 시간이 지난후 Off되는 타이머입니다.
void offTimer(입력소스, 타이머 번호, 경과시간)
입력 소스 : 타이머 시작입력 |
타이머 번호 : 사용할 타이머 번호 |
경과시간 : 타이머 mS(밀리초) 값입니다. 8은 0.8S를 뜻합니다. |
void logic_proc() { offTimer(X00,0,20); // 2Sec Off Timer Y01 = Tstat[0]; // Watch Tvalue }
시작과 동시에 On되고, 시간이 지난후 Off되는 일발성 타이머입니다.
void onceTimer(입력소스, 타이머 번호, 경과시간)
입력 소스 : 타이머 시작입력 |
타이머 번호 : 사용할 타이머 번호 |
경과시간 : 타이머 mS(밀리초) 값입니다. 8은 0.8S를 뜻합니다. |
void logic_proc() { onceTimer(X00,0,20); // 2Sec Once Timer Y01 = Tstat[0]; // Watch Tvalue }
적산타이머입니다. on타이머와 유사합니다. 정해준 시간이 지나면 On됩니다. 단 중간에 입력신호가 Off되어도 타이머는 리셋되지 않고 기존상태를 유지합니다. 타이머를 리셋시키려면 Tvalue[타이머번호]와 Tstat[타이머번호]에 0을 넣어주어야 합니다. 즉 리셋은 수동으로 해야 합니다.
void rTimer(입력소스, 타이머 번호, 경과시간)
입력 소스 : 타이머 시작입력 |
타이머 번호 : 사용할 타이머 번호 |
경과시간 : 타이머 mS(밀리초) 값입니다. |
Time1과 Time2의 합계가 경과시간에 도달하면 출력이 On됩니다.
#include "cfManagedBase.h" uint16_t tempi; void user_setup() { Serial.begin(115200); } void loop() { Serial.print(Tvalue[0]); Serial.print("\n"); delay(500); } void logic_proc() { rTimer(X00,0,100); Y00 = X00; Y01 = Tstat[0]; }
Cstat[카운터번호] 배열에는 각 카운터의 상태가 저장됩니다. Cvalue[카운터번호]에는 각 카운터의 현재 증감중인 값이 저장됩니다.
#define counterMaxLimit 20 uint8_t Cstat[counterMaxLimit]; // Counter status uint32_t Cvalue[counterMaxLimit]; // Counter Current Value
카운터 번호는 현재 20으로 지정되어 있습니다. (0~19까지 사용가능) 라이브러리 파일에 있는 counterMaxLimit를 수정하면 더 사용할 수 있습니다.
들어오는 펄스의 갯수를 카운트해줍니다.
void counter(상승입력, 하강입력, 리셋입력, 카운터번호, 카운트 값)
상승 입력 : 이 신호가 들어오면 카운터가 1 증가됩니다. |
하강 입력 : 이 신호가 들어오면 카운터가 1 감소됩니다. |
리셋 입력 : 이 신호가 들어오면 카운터가 리셋됩니다. |
카운터 번호 : 사용할 카운터 번호 |
카운트 값 : 카운트할 값, 16비트 부호없는 정수, 1~65535까지 사용가능 |
void logic_proc() { // 상승 : 입력 X00 // 하강 : 입력 X01 // 리셋 : 입력 X02 counter(X00,X01,X02,20); // 20번 X[0]입력이 들어오면 0번 카운터가 On됩니다. Y01 = Cstat[0]; // Watch Cvalue }
만약 상승신호만 받고 싶다면, 하강신호 위치에 0을 써주세요.
void logic_proc() { // 상승 : 입력 X00 // 하강 : 무시 // 리셋 : 입력 X02 counter(X00,0,X02,20); // 20번 X[0]입력이 들어오면 0번 카운터가 On됩니다. Y01 = Cstat[0]; // Watch Cvalue }
트리거(Trigger)란 입력 신호가 변화하는 시점에 단 한번만 실행처리를 하는 동작을 뜻합니다.
상승신호 발생시 한번만 실행합니다.
uint8_t rTrig(입력, 트리거번호)
입력 : 이 신호의 입력상태를 체크합니다. |
트리거 번호 : 사용할 트리거 번호 (0~19까지 사용가능) 이 숫자는 라이브러리에 있는 trigMaxLimet를 조정하면 더 늘릴 수 있습니다. |
#include "cfManagedBase.h" uint16_t tempi; void user_setup() { Serial.begin(115200); } void loop() { Serial.print(tempi); Serial.print("\n"); delay(500); } void logic_proc() { if (rTrig(X00,0)) tempi++; // X[0]가 0에서 1로 바뀌는 시점에 단 한번만 tempi++ (증가)를 수행합니다. Y00 = X00; }
하강신호 발생시 한번만 실행합니다.
uint8_t fTrig(입력, 트리거번호)
입력 : 이 신호의 입력상태를 체크합니다. |
트리거 번호 : 사용할 트리거 번호 (0~19까지 사용가능) 이 숫자는 라이브러리에 있는 trigMaxLimet를 조정하면 더 늘릴 수 있습니다. |
#include "cfManagedBase.h" uint16_t tempi; void user_setup() { Serial.begin(115200); } void loop() { Serial.print(tempi); Serial.print("\n"); delay(500); } void logic_proc() { if (fTrig(X00,0)) tempi++; // X[0]가 1에서 0으로 바뀌는 시점에 단 한번만 tempi++ (증가)를 수행합니다. Y00 = X00; }
ST언어는 PLC의 기능을 레더로직(LD)대신 코딩으로 풀어낼 수 있는 언어입니다. 대부분의 고성능 PLC에는 ST언어가 내장되어 있습니다.
본 라이브러리를 사용해서 마치 고성능 PLC에 있는 ST언어를 쓰시는 것처럼 modular FADUINO를 사용하실 수 있습니다.