ساختار کلی دستور
تعریف دستور Set
روشهای استفاده
1- استفاده مستقیم با اشاره گر
2- استفاده مستقیم با آرایه
2- استفاده مستقیم در شرطها
مثالهای کاربردی
1- کنترل موتور ساده
// تعریف اشارهگرها
Output *motorUp = &Q0[0];
Output *motorDown = &Q0[1];
Input *upButton = &I0[0];
Input *downButton = &I0[1];
// منطق کنترل موتور
if (upButton->Value && !downButton->Value) {
Set(motorUp); // فعال کردن موتور بالا
Reset(motorDown); // غیرفعال کردن موتور پایین
} else if (downButton->Value && !upButton->Value) {
Set(motorDown); // فعال کردن موتور پایین
Reset(motorUp); // غیرفعال کردن موتور بالا
} else {
Reset(motorUp); // توقف موتور بالا
Reset(motorDown); // توقف موتور پایین
}
2- کنترل سیستم پمپاژ
// تعریف اشارهگرها
Output *pump = &Q0[2];
Output *inletValve = &Q0[3];
Output *outletValve = &Q0[4];
Input *startButton = &I0[2];
Input *tankFull = &I0[3];
Relay *pumping = &M[0];
// منطق کنترل پمپ
if (startButton->Rising && !pumping->Value) {
Set(inletValve); // باز کردن شیر ورودی
Delay(1000); // تاخیر 1 ثانیه
Set(pump); // روشن کردن پمپ
SetRelay(pumping); // تنظیم وضعیت پمپاژ
}
if (tankFull->Value && pumping->Value) {
Reset(pump); // خاموش کردن پمپ
Reset(inletValve); // بستن شیر ورودی
Set(outletValve); // باز کردن شیر خروجی
ResetRelay(pumping); // ریست وضعیت پمپاژ
}
3- کنترل سیستم هشدار
// تعریف اشارهگرها
Output *alarm = &Q0[5];
Input *smokeSensor = &I0[4];
Input *temperatureSensor = &I0[5];
Relay *alarmActive = &M[1];
// منطق سیستم هشدار
if ((smokeSensor->Value || temperatureSensor->Value) && !alarmActive->Value) {
Set(alarm); // فعال کردن زنگ هشدار
SetRelay(alarmActive); // تنظیم وضعیت هشدار
}
if (!smokeSensor->Value && !temperatureSensor->Value && alarmActive->Value) {
Reset(alarm); // غیرفعال کردن زنگ هشدار
ResetRelay(alarmActive); // ریست وضعیت هشدار
}
4- کنترل توالی عملیات
// تعریف اشارهگرها
Output *step1Output = &Q0[0];
Output *step2Output = &Q0[1];
Output *step3Output = &Q0[2];
Relay *step1 = &M[0];
Relay *step2 = &M[1];
Relay *step3 = &M[2];
uint32_t stepStartTime = 0;
// منطق توالی عملیات
if (step1->Value && !step2->Value) {
Set(step1Output);
if (espElapsedTime(stepStartTime, 3000)) {
Reset(step1Output);
ResetRelay(step1);
SetRelay(step2);
stepStartTime = espGetCurrentTime();
}
}
if (step2->Value && !step3->Value) {
Set(step2Output);
if (espElapsedTime(stepStartTime, 5000)) {
Reset(step2Output);
ResetRelay(step2);
SetRelay(step3);
stepStartTime = espGetCurrentTime();
}
}
if (step3->Value) {
Set(step3Output);
if (espElapsedTime(stepStartTime, 2000)) {
Reset(step3Output);
ResetRelay(step3);
stepStartTime = espGetCurrentTime();
}
}