Examples - Greenhouse - 1 (simple)

Top  Previous  Next

The simple Greenhouse example is also the target for the online tutorial.

 

//-----------------------------------------------------------------------------
// Greenhouse.vpl, created 2000-05-16 09:01
// This program solves the following job:
//
// Gardener Green has a greenhouse in which he wants to control the temperature. 
// For that purpose he has bought a couple of temperature sensors and some 
// actuators. One of the temperature sensors will be adjusted to give a 
// signal when the temperature falls below a given temperature, and the 
// other sensor will give a signal when the temperature rises above a given 
// temperature. Using inputs from these sensores he wants to turn on a 
// heating unit and turn on the ventilation duct. 
// If the system does not succeed in bringing the temperature within the 
// given limits, the gardener wants to have a SMS message sent to his 
// mobile telephone. This message will notify him about the status of the 
// greenhouse. 
//-----------------------------------------------------------------------------
INCLUDE rtcu.inc
 
VAR_INPUT
  Sensor_L     : BOOL;   | Sensorinput for low temperature
  Sensor_H     : BOOL;   | Sensorinput for high temperature
  Alarm_time   : INT;    | time, 1..32767 minutes, time before SMS message is sent
  phone_number : STRING; | Telephone number to send SMS message to
END_VAR;
 
VAR_OUTPUT
  Out_Heater      : BOOL; | Output to activate heater
  Out_Ventilation : BOOL; | Output to activate ventilation
  online          : BOOL; | Is unit connected to a Cellular basestation
END_VAR;
 
VAR
  timer : TON; // ON-delay timer is declared.
                 // A On-delay timer goes active when 'trig' has
              // been active for 'pt' seconds.
  send_alarm : R_TRIG; // detects leading edge on alarm
END_VAR;
 
PROGRAM greenhouse;
 
// Initialization code:
Out_Heater := OFF;
Out_Ventilation := OFF;
 
// Set the timer
// (Convert to seconds)
timer(pt := Alarm_time*60*1000); 
 
// turn on Cellular-module
gsmPower(power := ON);
 
BEGIN
  // Update status for connected to Cellular base station
  online := gsmConnected();
 
  // If the temperature is to high then activate ventilation:
  IF Sensor_H THEN 
    Out_Ventilation:= ON;
  ELSE
    Out_Ventilation:= OFF;
  END_IF;
 
  // If the temperature is to low then activate the heater:
  IF Sensor_L THEN 
    Out_Heater:= ON;
  ELSE
    Out_Heater:= OFF;
  END_IF;
 
  // Start timer on the leading edge of the sensor-inputs:
  timer(trig:= Sensor_L OR Sensor_H);
 
  // Detect leading edge on alarm:
  send_alarm(trig:=timer.q);
 
  IF send_alarm.THEN
    IF Sensor_L THEN
      // send SMS for temperature too low 
      gsmSendSMS(phonenumber:=phone_number, message:="Temperature too low");
    ELSIF Sensor_H THEN
      // send SMS for temperature too high
      gsmSendSMS(phonenumber:=phone_number, message:="Temperature too high");
    END_IF;
  END_IF; 
END;
 
END_PROGRAM;