A kifejezéseket intelligens szabályok egyenleteiben és képleteiben alkalmazzunk.
A Modbus eszközöknél extra funkciók használhatók, a Modbus regiszterek értékeinek olvasásához / írásához.
Matematikai kifejezések
+, -, *, /
(20.5 + 9.5) / 2
(15)
Logikai kifejezések
AND, OR, !, =, >, <
(!IsRaining OR (Wind>30))
Funkciók
IF
IF(logikai kifejezés, hérték ha igaz, érték ha hamis)
Ha a logikai kifejezés igaz, akkor az 'igaz' értéket adja vissza, ha hamis, akkor a 'hamis' értéket.
Lineáris
LINEAR(input, value1_input, value1_output, value2_input, value2_output)
Példa 1:
LINEAR(250, 0, 0, 50, 500)
(25°C)
Példa
2:
LINEAR(5, 0, 400, 10, 3000)
(5V input from CO2 sensor (0V=400ppm, 10V=3000ppm) results in 1700ppm)
Egyenes irányban változó értéket ad vissza.
Kapcsoló
SWITCH(expression, case1, value1, [case2, ...], [value2, ...], default_value)
Tesztelés, az első kifejezéssel egyező lehetőség értékét adja vissza, ha semelyik lehetőség sem egyezik akkor az alapértelmezett értéket adja vissza.
MIN
MIN(value1, value2)
Két érték közül a kisebbet adja vissza.
MAX
MAX(value1, value)
Két érték közül a nagyobbat adja vissza.
BIT műveletek
<< (BIT balra tolása)
8 << 2
(32)
>> (BIT jobbra tolása)
32 >> 2
(8)
& (BITENKÉNTI ÉS)
3 & 1
(1)
| (BITENKÉNTI VAGY)
2 | 1 (3)
Hexadecimális számok
Az kifejezések hexadecimális számokat is tartalmazhatnak. A 0x előtag szükséges, a többi lehet kis és nagybetű is..
0x0A (10)
0xA0A0 (41120)
0xa0a0 (41120)
Modbus kifejezések
Regiszter típus
- C – tekercs
- SC – egy tekercs
- D – diszkrét bemenet
- H – tároló regiszter
- SH – egyes tároló regiszter
- A – analóg bemenet
Az "S" regisztertípusok csak írási funkciókra vonatkoznak, és azokat olyan eszközökön kell használni, amelyek nem támogatják egyszerre több regiszter írását.
Adat típus
- Int16 (-32,768 to 32,767)
- Uint16 (0 to 65,535)
- Int32 (-2,147,483,648 to 2,147,483,647)
- Uint32 (0 to 4,294,967,295)
- Bool – (-inf, 0> = false, (0, inf) = true
- BigEndianInt16
- LittleEndianInt16
- BigEndianUint16
- LittleEndianUint16
- BigEndianInt32
- LittleEndianInt32
- BigEndianUint32
- LittleEndianUint32
MODBUSR (MODBUS olvasás)
MODBUSR(register_type, register_address, data_type)
példa: MODBUSR(H, 20, Int16)/100
Visszaadott érték a tároló regiszter 20 as címén levő értéket int16 formátumban, és osztva 100-al.
MODBUSW (MODBUS írás)
MODBUSW(register_type, register_address, data_type, value_to_write)
Példa: MODBUSW(H, 20, Int16, Te/100)
A szenzor hőmérsékleti értékét osztja 100-al és int16 formátumban beírja a tárolóregiszuter 20 as címére.
MODBUSWNE (MODBUS írás egyenlőtlenség esetén)
Csak akkor ír a regiszterbe, ha az érték nem egyenlő. Kiplvassa az értéket, ellenörzi, és beírja a regiszterbe, ha nem egyenlő. Hasznos EEPROM memória mentés esetén.
MODBUSWNE(register_type, register_address, data_type, value_to_write)
Példa: MODBUSWNE(H, 20, Int16, Te/100)
Először kiolvassa a tárolóregiszter 20 as címén lévő adatot int16 formátumban, a hőmérséklet szenzor értékét elosztja 100-al, majd összehasonlítja a két értéket, és csak ha különböző, akkor írja be a kiszámított értéket a tárolóregiszter 20 as címére.