Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Irányítástechnika és Informatika Tanszék Villamosmérnök képzés 2011 őszi félév
Önálló laboratórium beszámoló I2C-Méterbusz illesztő egység tervezése indukciós áramlásmérőhöz
Készítette: Dézsi Krisztián (R48QXQ) Konzulens: Pilászy György Budapest,2011-12-08 1
Tartalomjegyzék Önálló laboratórium beszámoló
1
I2C-Méterbusz illesztő egység tervezése indukciós áramlásmérőhöz
1
Tartalomjegyzék
2
1.
Bevezetés
3
2.
Az Indukciós áramlásmérés elmélete[1][2]
4
2.1.
Az áramlásmérő illusztrációját az alábbi ábra mutatja:
4
3.
A mérő rövid ismertetése [2][5]
5
4.
Az alkalmazott Mikrokontroller[3][7]
7
4.1. A panel: 4.2. A PIC16F876A blokk diagramja: 4.3. Az USART megvalósítása: 4.3.1 TCXTA: 4.3.2 RCSTA: 4.3.3 SPBRG beállítása:
7 8 9 9 10 12
5.
A_M-Busz_Telegram_általános_formája[4]
13
5.1. Egy karakter (Single karakter): 5.2. Rövid üzenet(Short Frame): 5.3. Vezérlő üzenet(Control Frame): 5.4. Hosszú üzenet (Long Frame): 5.5. Vezérlő mező (Control Field): 5.6. Cím mező(Adress Field) 5.7. Vezérlési Információ (Control Information Field): 5.8. Fix adatstruktúra: 5.8.1 Azonosító szám 5.8.2 Hozzáférések száma 5.8.3 Státusz bit: 5.8.4 Közeg/egység: 5.8.5 Fizikai Egységek Táblázata: 5.9. Változó adatstruktúra: 5.9.1 Fix adta fejléc: 5.9.2 Változó adat Blokkok: 5.9.3 Adat Információs Blokk: 5.9.4 Adat információs mező: 5.10. Speciális Funkció: 5.10.1 DIFE: 5.10.2 VIF: 5.11. Kiterjesztett Bit:
13 13 13 13 14 15 15 15 15 15 16 16 17 18 18 18 19 19 20 20 20 21
6.
Kiterjesztett címzés[4]
23
7.
A kommunikáció megvalósítása telegrammal[4][6]
24
7.1. 7.2. 7.3.
Inicializálás: Adat lekérése: Átviteli sebesség beállítása:
24 24 26
8.
Grafikus Felület
27
9.
Kommunikáció a merővel [7]
28
10.
Mérő kapcsolás blokkvázlata, és az Mplab Icd2 In-Cuircuit Debugger[8]
30
11.
Felhasznált Irodalom
33
2
1.
Bevezetés
Önálló laboratóriumi feladatom egy I2C – Méterbusz illesztő egység megtervezése volt, mivel igény van a tanszéken arra, hogy egy előzőleg elkészített indukciós áramlásmérővel méterbusz szabvány alapján tudjunk kommunikálni a számítógéppel. Elsőként az indukciós áramlásmérésnek az elvét mutatnám be és az eszközt, amelyet előzőleg már elkészítettek, így ehhez kellett alkalmazkodni, kitérek továbbá az I2C interfészen történő kommunikációra. Ezt követően pár szóban írok a mikrokontrollerről, a Méterbusz telegramjának általános alakjáról, majd ennek alapján felvázolom a protokoll konverternek a blokkvázlatát, Mplab Icd2 In-Circuit Debugger-t, illetve egy saját telegramot állítok össze.
3
2.
Az Indukciós áramlásmérés elmélete[1][2]
Folyadékok áramlásának sebességét sok különböző módon lehet mérni, a legelterjedtebb megoldás napjainkban a szűkítő elemes és a turbinás áramlásmérés. Ezeknek a mérési módoknak nagy hátránya viszont, hogy lassítják az átáramló folyadék sebességét, ráadásul a közeg sűrűségétől is függ a mérés, így az egyes szenzorokat elvileg a különböző anyagokra külön-külön kell hitelesíteni. Manapság elterjedőben vannak az olyan mérési elven alapuló megoldások, amelyek nem képeznek akadályt, ilyen például az ultrahangos és az indukciós elvű áramlásmérés. Az indukciós elvű áramlásmérés a Faraday-féle indukciós törvényen alapul, homogén mágneses térben mozgó vezetőben feszültség indukálódik. Itt már látható, hogy csak azokon a folyadékon tudunk az indukciós mérés segítségével mérni, amelynek van egy bizonyos értéket meghaladó elektromos vezető képessége, ez a mérés hátránya is egyben. Faraday-féle indukciós törvény a következő alakban írható fel: Ahol U az indukált feszültség, B a mágneses tér indukciója, v az áramlási sebesség és D a cső átmérője.
2.1. Az áramlásmérő illusztrációját az alábbi ábra mutatja:
1. ábra
Látható, hogy az áramlási sebességtől és az indukciótól lineárisan függ az indukált feszültség. Ha a mágneses teret egyenárammal hozzuk létre, akkor B állandó lesz és a következő alakra írható át az indukált feszültség: Ahol L a tekercsek induktivitása és I pedig a gerjesztő áram. A mérés során L és D állandó, míg a gerjesztő áram alternáló egyenáram, vagyis az értéke állandó, de előjelét változtatjuk. Ilyen gerjesztési módszerrel elérhető, hogy a különböző állandó hibák kiejthetők, ha a pozitív és negatív gerjesztés mellett mért értékek átlagát vesszük. Az indukciós mérés megvalósítása látható a következő fejezetben.
4
3.
A mérő rövid ismertetése [2][5]
Az előző projektben elkészült áramlásmérő kizárólag olyan folyadékok mérésére alkalmas, melyek villamos vezetőképessége meghaladja az 5 µS/cm értéket. Nem tartalmaz mozgó alkatrészeket, ezért előnyösen alkalmazható szilárd részecskéket tartalmazó folyadékok esetén. A mérőcső kerámiából készült, ezáltal lehetőség van vegyi roncsoló és koptató tulajdonságú anyagok, például savak és lúgok mérésére is. Az adagoló funkcióval megvalósítható egy előre beállított anyagmennyiség bemérése, adagolása.
2. ábra Az indukciós áramlásmérőről
Mágneses gerjesztés hatására a mérőcsőbe beépített elektródákon az áramlási sebességgel arányos feszültség indukálódik, amit az elektronika digitális jellé alakít át, majd a mikro vezérlő feldolgozza. A jelfeldolgozás eredményeként a következő mennyiségeket szolgáltatja: Pillanatnyi térfogatáram Összegzett átáramlott anyagmennyiség A kiadagolt anyagmennyiség A mért adatok megjelenítéséhez szükség van egy csatlakoztatható eszközre, beállításainak megváltoztatásához, pedig egy számítógépre és a rajta futó programra, ami megfelelő protokollal kommunikálni tud a mérővel. A mért adatok védve vannak a tápfeszültség kimaradással szemben, ugyanis nem felejtő memóriában tárolódnak. Az áramlásmérő táplálására 24V-os egyenfeszültségre van szükség. A készülék bemenetei a következők: 24 V-os DC tápfeszültség bemenet Adagolást indító jel Lokális nullázás indító jel I2C interfész
5
A készülék hátlapján található TÁPLÁLÁS (POWER) feliratú kábelt a 24V egyenáramú táphálózathoz kell kapcsolni (hálózat negatív kapcsát a kék kábelérhez kell csatlakoztatni). A készülékhez kijelző és kezelőegység opcionálisan csatlakoztatható a kialakított I2C interfészen keresztül, itt csatlakozik majd a protokoll konverter. A készülék paramétereinek beállítása valamint kalibrálása ezen az interfészen keresztül történhet. A készülék kimenetei az alábbiak: Impulzuskimenet I2C interfész Az áramlásmérő az I2C interfészen keresztül folyamatosan szolgáltat adatokat, amelyeket tudunk fogadni egy megfelelő mikrokontroller segítéségével. Az alkalmazott mikrokontroller a PIC16F876A.
6
4.
Az alkalmazott Mikrokontroller[3][7]
A mikrokontroller egy PIC16F876A típusú kontroller, és a Panel adott volt, amelyet előző önálló laboratórium tárgy során használtak már, az alábbi tulajdonságai tették alkalmassá a kontrollert a használatra: az időzített kommunikációhoz kell a Timer az adat tárolás (elegendő legyen az adatok tárolásához) kontroller rendelkezzen I2C és UART interfésszel interrupt kezelésre is szükség van, mivel az adatok érkezésekor a vételt, és a lekezelést interruptból oldjuk meg
4.1. A panel:
3. ábra
7
4.2. A PIC16F876A blokk diagramja:
4. ábra
A PIC16F876A 20 MHz belső órajellel rendelkezik, ezt fontos tudni az Interruptok időzítése szempontjából, valamint rendelkezik egy 368 bájtos Ram memóriával, ami elegendő az adatok átmenti tárolásához. A kontrollernek három darab 8 bites portja, amit ezek közül fontos tudni, hogy az RC6 és RC7 lábakon az UART TX és RX van kötve, illetve az RC3 és RC4 lábak, amire pedig az I2C SCL és SDA van kötve.
8
4.3. Az USART megvalósítása: A kommunikáció megvalósításához inicializálni kell TXSTA, RCSTA regisztereket, ami az alábbi módon néz ki:
4.3.1 TCXTA: TRANSMIT STATUS AND CONTROL REGISTER (címe 98h) CSRC
TX9
TXEN
SYNC
-
BRGH
BIT 7
TRMT
TX9D BIT 0
bit 7 CSRC: Órajel Forrást kijelölő bit Aszinkron mód: Don’t care. Szinkron mód: 1 = Master mód (órajel belül generálódik a BAUD Rate generátorból) 0 = Slave mód (órajel külsőleg) bit 6 TX9: 9-bit Továbbítás engedélyezése 1 = kiválasztja a 9-bites továbbítást 0 = kiválasztja a 8-bites továbbítást bit 5 TXEN: Továbbítás engedélyezése 1 = Továbbítás engedélyezése 0 = Továbbítás tiltása bit 4 SYNC: USART Mode Select bit 1 = Szinkron mód 0 = Aszinkron mód bit 3 nincs implementálva : értéke 0 bit 2 BRGH: Nagy adatátviteli sebesség kiválasztása Aszinkron mód: 1 = nagy sebesség 0 = alacsony sebesség Szinkron mód: ebben a módban ez nincs használva bit 1 TRMT: Transmit Shift Register Status bit 1 = TSR üres 0 = TSR teli bit 0 TX9D: A Továbbítás 9. bitje, lehet paritás bit 9
5. ábra
4.3.2 RCSTA: RECEIVE STATUS AND CONTROL REGISTER (címe 18h) SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
bit 7 SPEN: Soros Port engedélyező bit 1 = Soros Port engedélyező (állítja RC7/RX/DT és RC6/TX/CK hogy azok soros pontként funkcionáljanak) 0 = Soros Port tiltása bit 6 RX9: 9-bit Fogadásának Engedélyezése 1 = Kiválaszt 9-bit fogadásra 0 = Kiválaszt 8-bit fogadásra bit 5 SREN: Egyetlen Fogadás engedélyezése Aszinkron mód: Don’t care. Szinkron mód – Master: 1 = Egyetlen Fogadás engedélyezése 0 = Egyetlen Fogadás tiltása Ha egy fogadás megtörtént, akkor ez a bit törlődik Szinkron mód – Slave: Don’t care.
10
bit 4 CREN: Folyamatos Fogadás engedélyezése Aszinkron mód: 1 = Folyamatos Fogadás engedélyezése 0 = Folyamatos Fogadás tiltása Szinkron mód: 1 = Folyamatos Fogadás engedélyezése addig, ameddig CREN nem törlődik (CREN felülírja SREN-t) 0 = Folyamatos Fogadás tiltása bit 3 ADDEN: Cím Érzékelés engedélyezése Aszinkron mód 9-bit (RX9 = 1): 1 = Cím Érzékelés engedélyezése, engedélyezi az intterruptot és betölti a fogadó buffert ha RSR (8) beállítódik 0 = Cím Érzékelés tiltása, az összes bájtot megkapja, és a 9. bit paritásbitként lesz használható bit 2 FERR: Keret Hiba bit 1 = Keret Hiba 0 = Keret Hiba nincs bit 1 OERR: Túlfutási Hiba bit 1 = Túlfutási Hiba 0 = Túlfutási Hiba nincs bit 0 RX9D: A fogadott adat 9. bitje (paritás bitként használható, de programmal kell állítani)
6. ábra
11
4.3.3 SPBRG beállítása: BAUD Rate generátor regiszter (címe 99H) Az értékét az alábbi táblázatok alapján tudjuk beállítani:
Ezekből az adatokból már könnyedén inicializálható az USART, amely után már csak a kommunikációt kell áttekintenünk az M-bus szabvány alapján.
12
5.
Az_M-Busz_Telegram_általános_formája[4]
5.1. Egy karakter (Single karakter): E5h-Ennek a karakternek a küldésével illetve fogadásával tudunk nyugtázni.
5.2. Rövid üzenet(Short Frame): Ennek segítségével kérjük le majd az adatokat, információkat. C- irányító mező A-cím mező (ezzel jelöljük meg a slavet) Check Sum – ellenőrző összeg
5.3. Vezérlő üzenet(Control Frame): Adatok küldésére használjuk, amely nem tartalmaz felhasználó adatokat. L- hossz, amelyet úgy számítunk ki, hogy a felhasználói adatok számához hozzáadunk hármat és az így megkapott összeg a hossz CI – ellenőrző információ
5.4. Hosszú üzenet (Long Frame): A vezérlő üzenethez hasonló, csak hogy itt lehet felhasználói adatot is küldeni. Short Frame
Start 10h C Field A Field Check Sum Stop 16h
Control Frame Start 68h L Field = 3 L Field = 3 Start 68h C Field A Field CI Field Check Sum Stop 16h
13
Long Frame
Start 68h L Field = 3 L Field = 3 Start 68h C Field A Field CI Field User Data 0-252 Check Sum Stop 16h
5.5. Vezérlő mező (Control Field): Bit Number Calling Direction Reply Direction
7 0 0
6 1 0
5 FCB ACD
4 FCV DFC
3 F3 F3
2 F2 F2
1 F1 F1
0 F0 F0
7. bit mindig nulla 6. bit határozza meg az adatfolyam irányát. 5. bit az FCB (FRAME COUNT BIT), ez arra szolgál, hogy sikeressé tegyük a továbbítást, mert előállhat az is, hogy a válasz, amit várunk hiányzik, vagy többször lett elküldve. Ha a FCB rossz, vagy hiányzik, akkor a master újra elküldi ugyanazt a telegrammot, ugyanazzal az FCB-vel, és a 4. bit (FCV-FRAME COUNT BIT VALID) 1-es értékre állítja. Ha nem tud a slave több kérést fogadni, akkor az ACD-t (hozzáférés letiltva) egyes értékre állítja; DFC (adatáramlás ellenőrzése) egyes értéke esetén a master az adatokat magasabb prioritással kezeli (Class 1). DFC és ACD nem kötelező részei a standardnak. A 3. bittől a 0. bit-ig az alábbi információt jelentik:
NÉV
C mező
C Field Hex.
Telegram
Leírás
Short Frame
Slave inicializálása
Long/Control Frame
Felhasználói adat küldése a Slave
Binárisan SND_NKE
0100 0000
40
SND_UD
01F1 0011
53/73
-nek
REQ_UD2
01F1 1011
5B/7B
Short Frame
REQ_UD1
01F1 1010
5A/7A
Short Frame
RSP_UD
00AD 1000
08/18/28/38
Class 2 adatok kérése Class 1 adatok kérése
Long/Control Frame Adatátvitel Slave-től Master-nak kérést követően
14
5.6. Cím mező(Adress Field) Ennek a mezőnek az értéke 1 Byte, így a címzés 0-255 mehet, de mivel vannak az M-Buszba beépített címek, ezért csak 1 - 250-ig lehet címezni.
5.7. Vezérlési Információ (Control Information Field): Ennek a mezőnek a segítségével történik az adat küldés, Slave kijelölés illetve a jelátviteli sebesség beállítása.
Mode 1 51h 52h
Application Adat küldés Slaves-ek kijelölése
8h B9h BAh BBh
300 baud beállítása 600 baud beállítása 1200 baud beállítása 2400 baud beállítása
BCh BDh 70h 71h 72h 73h
4800 baud beállítása 9600 baud beállítása általános hiba riadó állapot változó hosszúságú adat fix hosszúságú adat
5.8. Fix adatstruktúra: azonosító szám
Hozzáférések száma
Státusz
Közeg/Egység
számláló 1
4 Byte
1 Byte
1 Byte
2 Byte
4 Byte
5.8.1
számláló 2 4
Byte
Azonosító szám: sorozatszám, amit 8 BCD jegyben adtak meg, amely 00000000tól 99999999-ig tart.
5.8.2 Hozzáférések száma: minden egyes RSP_UD küldéssel nő egyel az értéke, ezt binárisan számolja (előjel nincsen)
15
5.8.3 Státusz bit: Bit
Bit beállítása estén
Bit nincs beállítva
0
számláló 1 és 2 előjeltelen binárisan kódolva
számláló 1 és 2 BCD-ben kódolva
1
számláló 1 és 2 meghatározott időpontban mentődnek
számláló 1 és 2 valódi értékekkel rendelkeznek
2
Alacsony energia
Nem Alacsony energia
3
Állandó hiba
Nincs Állandó hiba
4
Átmeneti hiba
Nincs átmeneti hiba
5
Készítő specializált
Készítő specializált
6
Készítő specializált
Készítő specializált
7
Készítő specializált
Készítő specializált
5.8.4 Közeg/egység: A közeg/egység mező mindig az első LSB bájttal továbbítódik, és megadja az átlagos mért érték mindkét számlálónak, és a mértékegységét is. Az 1. számláló egységét az első byte első 6 bitje adja, a 2. számlálót pedig a második bájté. A közeg kódolása ezeknek a felső két bitjében található, ez összesen 4 bit, ami 16 különböző értéket enged meg. Kódolást az alábbi táblázat reprezentálja. Byt e Bit
Byte No. 8 (2. byte) 16 15 Közeg MSB
hexadecimális érték 6 7 C D F
Byte No. 7 (1. byte)
14
13 12 11 10 9 számláló fizika egysége 2 MSB LSB
Bit 16 0 0 1 1 1
Közeg/Egység mező Bit 15 Bit 8 1 1 1 1 1
1 1 0 0 1
8 7 6 5 4 3 2 1 Közeg számláló fizika egysége 1 LSB MSB LSB
Közeg Bit 7 0 1 0 1 1
16
Meleg Víz Víz Meleg Víz Mód 2 Víz Mód 2 Foglalt
5.8.5 Fizikai Egységek Táblázata: Egység
MSB..LSB
h, m, s D, M, Y ml* 100 l l* 10 m3 m3* 10 m3* 100 ml/h ml/h* 10 ml/h* 100 l/h l/h* 10 l/h* 100 m3/h m3/h* 10 m3/h* 100
000000 000001 101000 101001 101010 101100 101101 101110 101111 110000 110001 110010 110011 110100 110101 110110 110111
17
Hex kód osztás Byte 7/8 00 01 28 29 2A 2C 2D 2E 2F 30 31 32 33 34 35 36 37
5.9. Változó adatstruktúra: Fix adta fejléc
változó adat Blokkok (Rekordok)
MDH
Mfg. specifikus adat specifikus
12 Byte
változó számú
1 Byte
változó számú
5.9.1 Fix adta fejléc: Azonosító szám 4 Byte
gyártó
Verzió
Közeg
2 Byte
1 Byte
1 Byte
Hozzáférések száma 1 Byte
Státusz
Aláírás
1 Byte
2 Byte
Itt az azonosító szám tetszőleges szám, amely 8 BCD digit-ben van kódolva (4 byte). A hozzáférések száma itt is úgy működik, mint ahogy a fix adatstruktúránál. A gyártó előjeltelen van kódolva binárisan 2 byte-ban. A gyártó azonosítója az alábbi formulával számítható: IEC 870 Man. ID =[ASCII (1es betű) +[ASCII (2es betű) +[ASCII (3as betű)
- 64] - 64] - 64]
32 32
32
A Verzió mező azt írja le, hogy a számláló milyen verziójú avagy generációjú. A közeg mező egy byte-ban van kódolva, és a Státusz mező legalsó két bit-je jelzi, ha hiba van, de ettől a két bittől eltekintve a Státusz mező megegyezik a fix adatstruktúránál használttal. Aláírás fent marad a jövőbeli alkalmazások kódolásaihoz, addig ennek a lefoglalt értéke 00 00h. kód bin. Bit 7 .. 0 0001 0110 0001 0111
közeg hideg víz kettős vagy dupla víz
kód hex. 16 17
5.9.2 Változó adat Blokkok: Az adat, az információ kódolása, hossza és az adat típusa továbbítódik az adat rekordokba. Ez annyi adatot küld, el amennyi elfér, összesen 255 byte hosszú. A karakterek számára a felső határ 240 byte, és a javasolt maximális telegram hossz 255 byte.
18
5.9.3 Adat Információs Blokk: DIF 1 Byte
DIFE VIF VIFE 0-10 (1 Byte per 1 Byte 0-10 (1 Byte per darab) darab) Adat Információ Blokk DIB Érték Információ Blokk VIB adat rekord fejléc DRH
Adat 0-N Byte
DIF - adat információs mező DIFE - adat információs mező kiterjesztése VIF - érték információs mező VIFE - érték információs mező kiterjesztése
5.9.4 Adat információs mező: Bit 7 kiterjesztett Bit
6
5
A tároló legalsó bitje
4
3
2
1
0
Adat mező: hossza és a kódolása az adatnak
funkciós mező
A funkcionális mező megadja az adat típust: kód 00b 10b
Leírás pillanatnyi érték Minimum érték
kód 01b 11b
Leírás Maximum érték Érték hiba estén
Az adatmező megmutatja, hogy az adat a mastertől hogyan értelmezendő (hossz és a kódolását). Ezt az alábbi táblázat mutatja: Hossz Bitben
kód
jelentés
kód
jelentés
0 8 16 24 32 32 / N 48 64
0000 0001 0010 0011 0100 0101 0110 0111
nincs adat 8 Bit Integer 16 Bit Integer 24 Bit Integer 32 Bit Integer 32 Bit Real 48 Bit Integer 64 Bit Integer
1000 1001 1010 1011 1100 1101 1110 1111
kiolvasás kiválasztása 2 digit BCD 4 digit BCD 6 digit BCD 8 digit BCD változó hossz 12 digit BCD Speciális Funkció
19
5.10. DIF 0Fh 1Fh 2Fh 3Fh..6Fh 7Fh
Speciális Funkció: Funkció A gyártóra jellemző speciális adatstruktúra, a felhasználó adatainak vége Ugyanaz, mint a DIF = 0Fh (több rekord követi a következő telegramban) Kihasználatlan (nem értelmezető) következő byte = DIF Foglalt Teljes kiolvasás kérése (minden tárolt, egység, tarifa, funkcionális mező)
5.10.1 DIFE: Bit 7 kiterjesztett Bit
6
5
(eszköz) egység
4
3
2
1
0
tároló szám
Tarifa
5.10.2 VIF: Bit 7
6
5
kiterjesztett Bit
4
3
2
1
0
egység és szorzó (érték)
kód
leírás
skála kódolása
skála
E001 0nnn
Térfogat
10(nnn-6)
m3
0.001L-tól 10000L-ig
E001 1nnn
Tömeg
10(nnn-3)
kg
0.001kg-tól 10000kg-ig
E010 00nn
Idő
E010 01nn
Működési idő
úgy mint az Idő
E011 1nnn
Térfogatáram
10(nnn-6)
E100 0nnn
Térfogatáram ext.
10(nnn-7) m3/min
E100 1nnn
Térfogatáram ext.
10(nnn-9)
E110 110n
Időpont
n = 0 dátum n = 1 idő és dátum
E111 00nn
Átlagos időtartam
mint az Idő
E111 01nn
Aktuális időtartam
mint az Idő
E111 1000
Gyártási szám
nn = 00 másodperc nn = 01 perc nn = 10 óra nn = 11 napok
20
m3/h
m3/s
0.001l/h-tól 10000l/hig 0.0001l/min-tól 1000l/min-ig 0.001ml/s-tól 10000ml/s-ig
5.11.
Kiterjesztett Bit: A rekord hiba típusa
VIFE-kód E0000000 E0000001 E0000010 E0000011 E0000100 E0000101 E0000110 E0000111 E0001000-tól E0001010-ig
Semmi Túl sok a DIFE Tároló nincsen implementálva Egység nincsen implementálva Tarifa nincsen implementálva Funkció nincsen implementálva Adat osztály nincsen implementálva Adat méret nincsen implementálva
E0001011 E0001100 E0001101 E0001110 E0001111 E0010000-tól E0010100-ig
Túl sok a VIFE Illegal VIF-csoport Illegal VIF-kitevő VIF/DIF eltérés Nem végrehajtott tevékenység
E0010101 E0010110 E0010111 E0011000
Hiba Csoport
DIF hiba
Foglalt
VIF hiba
Foglalt Adat nem elérhető (nem definiált érték) Adat túlcsordulás Adat alulcsordulás Adat hiba
E0011001-tól E0011011-ig
Foglalt
E0011100 E00 1101-tól E0011111-ig
Idő előtti rekord vége
adat hiba
Más hiba
Foglalt
21
VIFE-kód E00x xxxx E010 0000
Leírás Foglalt per másodperc
E010 0001
per perc
E010 0010
per óra
E010 0011
per nap
E010 0100
per hét
E010 0101
per hónap
E010 0110
per év
E010 1100
per liter
E010 1101
3 per m
VIFE-kód
leírás
E100 u000 E100 u001 E100 uf1b E101 ufnn E110 1f1b E111 0nnn E111 10nn E111 1100 E111 1101 E111 1110 E111 1111
u=1: felső, u=0: alsó határérték Meghaladja az alsó (u=0) / felső (U=1) határt Dátum: b=0: kezdete, b=1: vége, f=0: első, f=1: utolsó, u=0: alsó, u=1: felső határ meghaladása Időtartam, amivel meghaladja a limitet (u, f: ahogy felette, nn=hossz) Dátum (f, b: ahogy felette) nnn-6 Multiplikatív korrekciós tényező: 10 Adalék korrekció:10nn-3 Foglalt 3 Multiplikatív korrekciós tényező: 10 Jövőbeli érték Következő VIFE-ek és adata ennek a blokknak gyártó specifikusak
A kiterjesztett címzést érdemes vizsgálni néhány mondat erejéig.
22
6.
Kiterjesztett címzés[4]
Ha a használható 250 cím nem elég számunkra, akkor lehetőség van több cím elérésére, ez a 253 címen történik. A kiterjesztett címzés úgy valósul meg, hogy a master küld egy SND_UD a slave-nek a vezérlő utasításokkal (ez mód 1ben 52H, mód 2 ben 56H) a 253 címre, ebben meg kell adni a mérő egyedi másodlagos címét (azonosító szám, gyártó, verziószám, közeg információk). Ezt a slave feldogozza, ha 253 cím utána CI mezőben 52h-t (mód 1), akkor beállítja a kiválasztó bitet, ha nem, akkor resetelődik. Abban az esetben, ha a 253 címre jött a CI=52h, de az további adatok nem megfelelőek, akkor a visszalép a normál címzésre. A sikeres címzést egy nyugtázó karakterrel jelzi nekünk a slave (E5h), ha sikertelen volt, akkor nem küld vissza semmit sem. A kiterjesztést lehet folytatni addig, amíg nem lesz elegendő mennyiségű mérő címünk. A kiválasztás során lehetőség van egyedi pozíciók lefoglalására a másodlagos címen (Fh), ami azt jelenti, hogy az adott címet nem használjuk fel kiválasztás során, így lehet például létrehozni slave csoportokat Multicast-hoz. Addig a pontig minden slave kijelöletlen állapotban marad, ameddig nem kerül kijelölt állapotba, ez előfordulhat, ha nem megfelelő másodlagos címet adtunk meg. A telegramok könnyebb érthetősége kedvéért néhány példát érdemes átnézni, hogy biztosan helyesen tudjuk azt alkalmazni.
23
7.
A kommunikáció megvalósítása telegrammal[4][6] 7.1. Inicializálás:
Ha a kezelő felületen a connect gombot megnyomjuk, úgy az kapcsolódik a merő egységhez az 50H címen. Első lépésben inicializálnunk kell a mérőt, ami az alábbi Short Frame-mel tehető meg: 10H (start) 40H (slave inicializálása) 50H (slave címe) 90H (ellenőrző összeg) 16H (stop) Ha ez helyesen lett megadva, akkor a slave küld egy karaktert válaszul, amely az E5h nyugtázás, ha nem küld a slave, vagy nem ezt küldi nekünk akkor ezt a műveletet meg kell ismételni.
7.2. Adat lekérése: Adatok lekérésekor a Master küld egy Short Frame-t a slave-nek, majd az válaszol egy Long Frame-mel az adatokkal, ezt az alábbi telegramok írják le: Kérés: Master→Slave 10H (start) 5AH (adatok lekérése) 50H (slave címe) ABH (ellenőrző összeg) 16H (stop) Válasz: Slave→Master 68H 13h (hossz) 13h 68h 08h (válasz) 50h (cím) 73h (fix hosszúságú adat) 01 02 03 04 (azonosító: 04030201) 00h (hozzáférések száma) 01h (státusz) 69h E9h (közeg: víz, mértékegység: liter) 05 00 00 00 (5 liter van jelenleg) 00 00 00 00 (0 liter volt előző lekérésnél) 2Dh (ellenőrző összeg) 16h
24
Ez a slave válasza egy ilyen lekérés esetén, visszaadja az előző lekérdezéskor, hogy hány liter folyt át eddig a merőn, és a jelen lekérdezésig. Ha bővebb információt szeretnénk lekérni a mérőről, akkor az alábbi short framet kell küldeni a slave-nek: Master→Slave 10H (start) 5BH (adatok lekérése) 50H (slave címe) ABH (ellenőrző összeg) 16H (stop) Válasz: Slave→Master 68H 10h (hossz) 10h 68h 08h (válasz) 50h (cím) 72h (változó hosszúságú adat) 43 21 00 00 (azonosító: 2143) 12 34h (gyártó 3412) 00h (verzió) 16h (közeg: víz) 00 (hozzáférések száma) 00 (státusz) 12h (maximum) 2E (mértékegység m3/h) 0Ah (10 m3/h volt a max) D4h (ellenőrző összeg) 16h Változó adathossz esetén visszaküldhető minden mérő tarifája áramlott mennyiség, illetve egyéb dolgok is.
25
7.3. Átviteli sebesség beállítása: A beállítás egy Control Frame elküldésével történik, ha ez megfelelő volt, akkor érkezik egy nyugtázó válasz a slavetől. Az alábbi üzenet beállítja a slave átviteli sebességét 2400-ra: Master→Slave 68H 03h (hossz) 03h 68h 53h (felhasználói adat küldése slave-nek) 50h (cím) BB h (baudrate: 2400) 60h (ellenőrző összeg) 16h Slave → Master E5 (nyugtázás) Miután láttuk, hogy a telegrammal történő kommunikáció hogyan is néz ki, azután már érdemes a mérővel történő kommunikációban gondolkozni.
26
8.
Grafikus Felület
Felmerült az igény a könnyebb és közérthetőbb kommunikáció érdekében, hogy adatok küldése, fogadása történhetne egy grafikus kezelő felületen. Ezt reprezentálja a következő ábra:
7. ábra
A kommunikáció megkezdése előtt csatlakoznunk kell az adott mérőhöz, amit úgy tehetünk meg, hogy beírjuk a mérő címét és az azonosítóját. A connect gomb megnyomásával tudunk kapcsolódni, ha a kacsolódás sikeres volt, akkor ezt a mérő egy nyugtázással jelzi (E5H), sikertelen kapcsolódás esetén nem kapunk visszajelzést. A kezelő felületen található Send gombok segítségével küldhetünk üzenetet a merőnek, ami lehet Short, Long, vagy Control Frame. Ez utóbbit a Long Frame-mel egy ablakban tudjuk küldeni. A fogadás a Recived feliratú szövegdobozban történik, ezt jelzi számunkra a LOG ablak. A LOG megmutatja minden esetben az éppen lezajló tevékenységeket, kapcsolódás sikeres volte, elküldtünk egy frame-t , fogadtunk egy frame-t,leválasztás sikeres volt-e, illetve ha hiba lép fel. dsad A csatlakozást követően egyből meg kell adni a bitsebességet, ezt egy short frammel tudjuk megtenni,ha ezt nem tesszük meg, de elküldünk egy másik framet hibával tér vissza. A serialPort1-ben tudjuk megadni, hogy a kapcsolódás melyik portón történik, ezt előre be kell állítani indítás előtt. 27
9.
Kommunikáció a merővel [7]
A kommunikáció minden esetben egy 3 bájtos parancskeret lesz, amelynek az első bájtja határozza meg; hogy írás, olvasás, vagy indítás (újraindítás) fog történni. Az első paraméter lesz a cím, ami meghatározza, hogy a mérőnek milyen paraméterét szeretnénk megtudni vagy beállítani. A második paraméter lesz az adat, amit megadunk a merő számára. A mérő elérése az 50H címen történik. Parancs bájt 00H-indítás, újraindítás 01H-olvasás 02H-írás
paraméter 1 X (nem definiált) cím megadása cím megadása
cím[H]
jelentés
00-01
Összegzett liter
02-03
Összegzett deciliter
04-05
Összegzett m3
06-07
Átlagos m3/h
08-09
Maximum m3/h
0A-0B
Minimum m3/h
0C-0D
Jelenlegi m3/h
0E-0F
Tömeg
10-11
Üzemidő
12-13
Átlagolt AD érték
14-15
Utolsó AD érték
16-17
Tárolt adatok lekérdezése
18-19
Átviteli sebesség beállítása
1A-1B
Hibajelzés
1C-1D
fenntartva
1E-1F
fenntartva
paraméter 2 X (nem definiált) X (nem definiált) adat megadása
Az alábbi táblázat minden olyan információt tartalmaz, amelyet a mérő végre tud hajtani, így a mérőbe tudunk írni és kiolvasni adatokat, illetve indítási beállításokat visszaállítani abban az esetben, ha program futása során valami hiba történt.
28
A program minden esetben az 50H címre ír, illetve abból olvas ki, habár van lehetőség a kezelő felületen más cím megadására is, de ezt itt nem használjuk ki. Az első paraméter, amit kapunk az minden esetben egy cím, aminek meg kell egyezni a kontroller címével. Ezt követően tudunk kommunikálni, a mérő figyeli, ha adat jött, ezt RCIF Flag jelzi, mivel az inicializálást úgy végeztem, hogy RCIE minden esetben 1 értékű legyen és a vizsgálatot RCIF&&RCIE re végzem. Olvasás esetén ki kell olvasni RCREG tartalmát egy bufferbe, beolvasás után érdemes elvégezni egy hibakezelést, mivel a szabványt alkalmazzuk, így tudjuk azt, hogy az első elemnek 10h vagy 68h-nak kell lennie, illetve az utolsónak pedig 16h-nak. A hibakezelés után tudatni kell a merővel, hogy mit szeretnénk tőle, lehet ez például egy adat lekérés, ezt el kell küldeni a mérőnek, majd az visszaküldi a megfelelő adatokat. A visszaküldött adatokat úgy tudjuk visszaküldeni, hogy írunk TXREG-be, ami automatikusan állítja TXIF Flaget, így jelezve, hogy írás jött és ekkor vissza tudjuk küldeni a kívánt információt a grafikus felületre.
29
10.
Mérőkapcsolás blokkvázlata,illetve a Programozó eszköz[8]
Az alábbi mérőkapcsolással szemléltetem a megvalósított feladatot:
Mérő
I2C
μcr
M –Bus - broadcast - cím - stock
Buffer
M-Bus illesztő
M-Bus master
Áramkör
mikrokontroller
M Busz 8.ábra
A programozásra az Mplab Icd2 In-Circiut Debugger használtam amelynek ábrája itt található:
9. ábra
Az eszköz képest adatokat kiolvasni a mérőből, illetve adatokat írni a merőbe.
30
PC
A Programozó eszköz kapcsolási ábrája, pedig a következő illusztrálja:
10. ábra
Az eszköznek két bemente van egy RJ-12 Jack, amelyet a mérőre kell kötni, így zajlik a kommunikáció, illetve egy Usb Type B, így tudunk kommunikálni a PC-vel. Az Usb Kábel másik vége pedig egy Usb Type A, amit a PC eszközbe lehet csatlakoztatni. RJ-12 Jack lábkiosztása:
11. ábra
USB Type A lábkiosztása:
12. ábra
31
Illetve USB Type B lábkiosztása:
13. ábra
32
Köszönetnyilvánítás: Itt ragadnám meg az alkalmat, hogy köszönetet mondjak Pilászy György Tanár Úrnak az Önálló Laboratóriumi munkám során nyújtott segítségért.
11.
Felhasznált Irodalom
[1]: Dr. Csubák Tibor: Programozható irányítóberendezések és szenzorrendszerek [2]: Bogár Ádám: Diplomaterv [3]: PIC16F87X Data Sheet [4]: M-Bus dokumentáció (http://www.m-bus.com/mbusdoc/default.php) [5]: Áramlás érzékelő (távadó) Típus 433 leírása [6]: Balogh Barna Diplomaterv: Mikrokontrolleres melegvízfogyasztás mérő készülék tervezése [7]: Podmaniczky Nándor önálló laboratórium [8]: Mplab Icd2 In-Circuit Debugger (http://ww1.microchip.com/downloads/en/devicedoc/51331b.pdf)
33