Astable flip-flop:

Periodically flips both relays.

prog(
	out.1 = !out.1,
	out.2 = !out.1
)

 

On/Off switch


prog(
	
	push1 = !latch1 && in.1,
	latch1 = in.1,
	
	out.1 = iif(push1, !out.1, out.1)
)

 

On/Off switch with time limit


prog(
	
	usr.MaxTime := 300,
	
	push1 = !latchi1 && in.1,
	latchi1 = in.1,
	
	out.1 = iif(push1, !out.1, out.1),
	
	on1 = !latcho1 && out.1,
	latcho1 = out.1,
	
	stamp1 = iif(on1, sys.time, stamp1),
	
	age1 = sys.time - stamp1,
	
	out.1 = iif(out.1 && (age1 < usr.MaxTime), out.1, 0),
	
	usr.On = out.1
)

 

Floor convector control

Controls up-to two fans of the floor heating convector.
Monitors room and heater temperatures.

prog(

	usr.TargetTemp := 21,

	HeatingCapability = tm.Input.Temp - tm.Inside.Temp,
	
	TempDiff = usr.TargetTemp - tm.Inside.Temp,

	CanHeat = HeatingCapability > 5,
	
	ShouldHeat = TempDiff > 0.5,
	
	out.1 = CanHeat && ShouldHeat,
	
	out.2 = out.1 && (TempDiff > 2),
	
	usr.Heating = out.1 + out.2
	
)