자기 유지란 레더로직(또는 시퀀스 회로)를 공부할때, 가장 먼저 배우는 회로입니다.
START 스위치를 누르면 모터가 돌아가고, STOP스위치를 누르면 모터가 정지하는 상황입니다. 이를 위한 레더 프로그램은 다음과 같습니다.
X00, X01은 PUSH 스위치를 연결하세요. Y00에는 모터를 연결하세요.
동작 타이밍 차트입니다.
X00 푸쉬스위치를 누르면 Y00에 연결된 모터가 ON됩니다. 그리고 이 상태는 유지됩니다. 그래서 "자기유지"라고 부릅니다. 멈추려면 X01 푸쉬스위치를 누르세요.
C언어로 코딩하면 다음과 같습니다.
#include "cfManagedBase.h" void user_setup() { } void loop() { } void logic_proc() { Y00 = (X00 | Y00) & !X01; }
접점상태를 시리얼 모니터에서 함께 보려면 이렇게 코딩하세요.
#include "cfManagedBase.h" void user_setup() { Serial.begin(115200); } void loop() { debug ("X00",X00); debug ("X01",X01); debug ("Y00",Y00); debugcr; delay(100); } void logic_proc() { Y00 = (X00 | Y00) & !X01; }
1초마다 On / Off 반복하는 프로그램입니다. 앞서 언급했다시피 logic_proc 는 매 20mS마다 실행됩니다. 50번 반복하면 1초가 됩니다.
전역변수 time_var를 하나 선언하고, logic_proc가 매번 실행될 때마다 1씩 증가한뒤, 이 변수가 50이 되었는지 체크해서 출력 Y00를 반전시켜주는 프로그램입니다.
#include "cfManagedBase.h" int time_var=0; void user_setup() { } void loop() { } void logic_proc() { time_var++; // increse every 20mS if (time_var == 50) { Y00 = !Y00; time_var = 0; } }
만약 1초마다 한번씩 실행시키고 싶은 로직처리가 있다면 이렇게 코딩하세요.
#include "cfManagedBase.h" int time_var=0; void user_setup() { } void loop() { } void onesec_proc() { // logic process every 1 sec. } void logic_proc() { time_var++; // increse every 20mS if (time_var == 50) { time_var = 0; onesec_proc(); } }