MBus protokollan käyttöönotto FX ala-asemalla

Miten saadaan MBus laitteista lukemat ja arvot FX ala-asemaan

Lähtökohdat:

  1. FX ala-asema
  2. MultiLink laite jossa on 1 tai 2 MBus portin moduulia. HUOM! MultiLink sähkönsyöttö täytyy olla 24 VDC jotta MBus moduulit toimivat
  3. MBus laite (mittari, anturi yms)

 


Määritellään portti ala-asemalla:

Määritellään portti MultiLINKilla:

Luodaan uuden MBUS moduulin (laitteen):

Kun ”Sanomia” olisi nollan suurempi, kommunikaatio on OK.


IEC ohjelmointi

MBus liityntä vaatii vain 1 oikea funktion kutsu:

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ää Käynnistämällä seuraavan pätkän:

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 arvot, selitetään mikä on oikein "index" parametri.

---------------------------------------------------------------------

Toinen tapa:

Ruksitaan "debug" vastaava MBus moduuli ja sitten katsotaan ala-aseman HDisk\Data\MBusDebug.txt

josta saadaan seuraava 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 tarvitsemme. Siksi tarvittava "index" = 2.