Miten saadaan MBus-laitteista lukemat ja arvot FX ala-asemaan
Lähtökohdat:
- FX ala-asema
- MultiLINK-laite, jossa on 1 tai 2 MBus-portin moduulia.
- MBus-laite (mittari, anturi yms)
HUOM! MultiLINK:in sähkönsyöttö täytyy olla 24 VDC, jotta MBus-moduulit toimivat.
Määritellään portti ala-asemassa:
Määritellään portti MultiLINK:issä.
Luodaan uusi MBus-moduuli, eli Mbus-laite.
Kun sanomien lukumäärä on yli 0, on kommunikaatio ok.
IEC-ohjelmointi
MBus-liityntä vaatii vain yhden funktion ”GetMBusValueF”.
Manuaalissa on GetMBusValueF funktion kuvaus:
mittaustulos := GetMBUSValueF( Module:=mbus_address, Index:=Indeksi, Divider:=0.001, Port:=port ) ; (*Itron indexillä 5, BMeters indeksillä 1, divider molemmissa 0.001*)
"Index" parametri voidaan selvittää seuraavalla ohjelmanpätkällä: (Tai MBusDebugilla, joka kerrottu myöhemmin).
VAR
MBus : Array[1..32] of real;
i : int ;
END_VAR
PROGRAM
for i := 1 to 32 do
MBus[i] := GetMBUSValueF( Module:=1, Index:=i, Divider:=1.0, Port:=0 ) ;
end_for;
Monitoroimalla (OpenPCS Online) MBus[] taulukon arvoja, saadaan selville oikea "index" parametri.
---------------------------------------------------------------------
Toinen tapa:
Ruksitaan "debug" halutusta MBus-moduulista ja sitten katsotaan ala-asemasta HDisk\Data\MBusDebug.txt
josta saadaan seuraavan näköinen viesti:
-----------------------------------------------------------
00430 ReadMBUSModule Start
IP 192.168.11.30 Port 10002 m_PrimaryAddress 1 m_CommunicationAddress 0
01560 Sending primary address: 68 0b 0b 68 53 fd 52 50 79 55 64 ff ff ff ff 20 16
02537 CMBUS::ReadAckMsg: Data e5
03724 Sending ask data: 10 7b fd 78 16
ReadLongFrameMsg() Valid msg
04868 ReadLongFrameMsg() Status 1 m_BytesInBuf=64 uBytesInMsg=64
04872 CMBUS::GetData(): ReadLongFrameMsg() returned 1
68 3a 3a 68 08 32 72 50 79 55
64 a5 11 40 04 10 50 00 00 0c
06 00 00 00 00 0c 13 36 96 63
06 0b 3b 76 17 00 3c 2b bd eb
dd dd 3a 5a bd eb 3a 5e bd eb
8c 10 06 00 00 00 00 0a a6 18
28 42 da 16
06117 CMBUS::ParseMessage()
DataLen 58 Field_C 08H
Field_A 50 Field_CI 72H
Man DME Field_Version 64
Field_Medium 4 Heat Field_Access 16
Field_Status 80 IDnumber 64557950
Datarecord: DataRecordPtr=19
DIF 0cH VIF 06H Coding 0 Exponent 6 Multiplier 1000
Value: 0 / 0 (hex) , 0 / 0 (dec), 0.000000 (dbl) Unit: 'Energy [Wh]' DataType: '12 = 8 digit BCD'
Datarecord: DataRecordPtr=25
DIF 0cH VIF 13H Coding 2 Exponent 3 Multiplier 0.001
Value: 0 / 655014 (hex) , 0 / 6639636 (dec), 6639.636000 (dbl) Unit: 'Volume [m3]' DataType: '12 = 8 digit BCD'
Datarecord: DataRecordPtr=31
DIF 0bH VIF 3bH Coding 7 Exponent 3 Multiplier 0.001
Value: 0 / 6f0 (hex) , 0 / 1776 (dec), 1.776000 (dbl) Unit: 'Volume flow [m3/h]' DataType: '11 = 6 digit BCD'
Datarecord: DataRecordPtr=36
DIF 3cH VIF 2bH Coding 5 Exponent 3 Multiplier 1
Value: 0 / 89c0f27 (hex) , 0 / 144445223 (dec), 144445223.000000 (dbl) Unit: 'Power [W]' DataType: '12 = 8 digit BCD'
Datarecord: DataRecordPtr=42
DIF 3aH VIF 5aH Coding 11 Exponent 2 Multiplier 0.1
Value: 0 / 3b77 (hex) , 0 / 15223 (dec), 1522.300000 (dbl) Unit: 'Flow temp [C]' DataType: '10 = 4 digit BCD'
Datarecord: DataRecordPtr=46
DIF 3aH VIF 5eH Coding 11 Exponent 2 Multiplier 0.1
Value: 0 / 3b77 (hex) , 0 / 15223 (dec), 1522.300000 (dbl) Unit: 'Return temp [C]' DataType: '10 = 4 digit BCD'
Datarecord: DataRecordPtr=50
DIF 0cH DIFE 10H VIF 06H Coding 0 Exponent 6 Multiplier 1000
Value: 0 / 0 (hex) , 0 / 0 (dec), 0.000000 (dbl) Unit: 'Energy [Wh]' DataType: '12 = 8 digit BCD'
Datarecord: DataRecordPtr=57
DIF 0aH VIF 26H Coding 4 Exponent 0 Multiplier 3600 VIFE 18H
Value: 0 / 1084 (hex) , 0 / 4228 (dec), 15220800.000000 (dbl) Unit: 'Time [sec]' DataType: '10 = 4 digit BCD'
8 Datarecords received
After V950_SaveMBUSData()
06693 CMBUS::GetData(): ParseMessage returned 0
06748 ReadMBUSModule End
Josta saadaan selville, että toinen DataRecord sisältää "Volume m3", joka on haluamamme tieto. Siksi tarvittava "index" = 2.
Artikkeli päivitetty: 9.1.2023