Plik konfiguracyjny urządzeń MODBUS RTU
Z wszystkimi urządzeniami wymienionymi w elemencie <Devices> , nawiązywana jest komunikacja podczas startu programu ibvunit.
Urządzenia identyfikowane są na podstawie trzech wartości liczbowych:
- HardwareId (h) – liczbowy identyfikator sprzętowy urządzeniach
- FirmwareId (f) – liczbowy identyfikator oprogramowania
- FirmwareVersion (v) – liczbowy identyfikator wersji oprogramowania
Na podstawie w/w wartości składana jest unikalna nazwa urządzenia w postaci np. h3f1v6. Każde urządzenie ma swój indywidualny plik konfiguracyjny.
Program ibvunit przydziela danemu urządzeniu konfigurację, wybierając ją z odpowiedniego pliku xml. Zalecaną nazwą pliku konfiguracyjnego jest pełna nazwa urządzenia np. h3f1v6.xml.
Przykładowy plik konfiguracyjny
Poniżej przedstawiona jest składnia przykładowego pliku konfiguracyjnego urządzenia h1021f1v0. Przykład ten zawiera również komentarze, które pełnią funkcję skróconej dokumentacji, podpowiedzi lub przykładu alternatywnej konfiguracji, dzięki temu jest możliwa edycja pliku konfiguracyjnego w sposób intuicyjny.
- h1021f1v0.xml
<?xml version="1.0" encoding="UTF-8"?> <!--Copyright (C) 2004-2015 InsBud www.insbud.net--> <Device xmlns="http://www.insbud.net/common/devcfg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.insbud.net/common/devcfg devcfg.xsd" Version="1.2" HardwareId="1021" FirmwareId="1" FirmwareVersion="0"> <!-- plik konfiguracyjny przetwornika przepływu powietrza dla aplikacji ibvunit-2.0 niniejszy plik konfiguracyjny został opracowany na podstawie dokumentacji rejestrów dostarczonej przez producenta. fabryczne parametry komunikacji: 4800 bps, 8 data bits, parity: NONE; 1 stop bit domyślne ID1. Możliwość zmiany ID z poziomu protokołu oraz przez zworki na urządzeniu. --> <!-- <HoldingRegisters SetMode="Single"> --> <!-- <HoldingRegisters> --> <HoldingRegisters SetMode="Single"> <!-- content: Current wind speed value access type: R Definition: / Unit: [0.1 m/s] ze znakiem Remarks: 10 times the actual value --> <HReg Addr="0" Name="counter.current.wind.speed" Rd="1" Wr="0" Min="-32766" Max="32766" Presentation="signed"/> <!-- content: Integer value of current air volume (integer) access type: R Definition: / Unit: [1 m³/h] Remarks: Range 0~65535,Max 65535,exceed 65535 display 65535 Current air volume value = current wind speed value (in meters per second) x pipe cross-sectional area (in square centimeters) x 3600÷10000. Example result: Integer value of air volume: 0221 H (hexadecimal)= 545=> integer value of air volume = 545m³/h --> <HReg Addr="1" Name="counter.current.air.volume.int" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/> <!-- content: The upper 16 digits of the floating-point value of the current air volume access type: R Definition: / Unit: [m³/h] Remarks: Current air volume value = current wind speed value (in meters per second) x pipe cross-sectional area (square centimeters) x 3600÷10000. Floating-point data retains one significant decimal place. Example result: Air volume floating point value: 44084CCD H (hexadecimal) = 545.2 => air volume floating point value = 545.2m³/h --> <HReg Addr="2" Name="counter.current.air.volume.float.h" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/> <!-- content: The lower 16 digits of the floating-point value of the current air volume access type: R Definition: / Unit: [m³/h] Remarks: / --> <HReg Addr="3" Name="counter.current.air.volume.float.l" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/> <!-- content: Current pipe cross-sectional area access type: RW Definition: / Unit: [1 cm2 ] Remarks: / --> <HReg Addr="512" Name="setting.duct.area" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/> <!-- content: Device Address access type: RW Definition: / Unit: / Remarks: 1~254(default 1) --> <HReg Addr="2000" Name="modbus.address" Rd="1" Wr="1" Min="0" Max="254" Presentation="unsigned"/> <!-- content: Device baud rate access type: RW Definition: 0 means 2400 1 means 4800 2 means 9600 3 means 19200 4 means 38400 5 means 57600 6 means 115200 7 means 1200 Unit: / Remarks: / --> <HReg Addr="2001" Name="modbus.speed" Rd="1" Wr="1" Min="0" Max="7" Presentation="unsigned"/> </HoldingRegisters> <InputRegisters> </InputRegisters> <Coils> </Coils> <DiscreteInputs> </DiscreteInputs> </Device>
Głównym elementem pliku konfiguracyjnego jest Device, posiadający między innymi atrybuty:
- Version – określa wersją pliku konfiguracyjnego urządzenia. Właściwą wersją pliku konfiguracyjnego urządzenia jest 1.2 (dla programu ibvunit w wersji 2.3.5).
- HardwareId (h) – liczbowy identyfikator sprzętowy urządzeniach
- FirmwareId (f) – liczbowy identyfikator oprogramowania
- FirmwareVersion (v) – liczbowy identyfikator wersji oprogramowania
Pozostałe elementy pliku konfiguracyjnego zostały opisane w osobnych rozdziałach dokumentacji.
<HoldingRegisters>
<HoldingRegisters SetMode="Multiple"> <!-- multiple <HReg/> elements --> </HoldingRegisters>
Element HoldingRegisters jest odpowiedzialna za zdefiniowanie rejestrów urządzenia typu Holding Registers z komunikacją MODBUS RTU, które będą dostępne dla programu ibvunit.
Element może zawierać wiele elementów <HReg> lub nie zawierać żadnego takiego elementu.
Element zawiera atrybuty:
- SetMode - (obowiązkowy) Wartość atrybutu określa czy do ustawienia wartości danego rejestru należy użyć funkcji MODBUS PresetSingleRegister czy WriteMultipleRegisters. Atrybut może przyjmować wartości:
- Multiple - oznacza, że komunikacja z urządzeniem MODBUS dopuszcza stosowania hurtowych zapisów dla Holding Registers. Wartość Multiple należy ustawiać tylko dla urządzeń MODBUS poprawnie realizujących funkcje WriteMultipleRegisters (kod 16).
- Single - oznacza, że komunikacja z urządzeniem MODBUS dopuszcza stosowania jedynie pojedynczych zapisów dla Holding Registers. Wartość Single należy ustawiać tylko dla urządzeń MODBUS poprawnie realizujących funkcje PresetSingleRegister (kod 6).
Jeżeli urządzenie wspiera oba tryby, zalecane jest użycie Multiple ze względów wydajnościowych.
Każde urządzenie obsługujące zmienne typu HoldingRegister musi prawidłowo realizować przynajmniej jedną z w/w funkcji w celu zmiany wartość danego rejestru.
Odczyt zmiennych typu HoldingRegister realizowany jest przez funkcję MODBUS ReadHoldingRegisters (kod 3), która również musi być wspierana przez urządzenie.
<HReg>
Element znajdujący się w elemencie <HoldingRegisters>. Element jest odpowiedzialna za zdefiniowanie pojedynczego rejestru urządzenia typu Holding Registers z komunikacją MODBUS RTU
<HReg Addr="0" Name="dev.hardware" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/> <HReg Addr="2" Name="reg.speed" Rd="1" Wr="1" Min="0x0055" Max="0x00aa" Presentation="hex"/>
Element zawiera atrybuty:
- Addr – adres rejestru w urządzeniu zgodnym z MODBUS RTU.
- Name – nazwa własna rejestru. Pod tą nazwą rejestr będzie funkcjonował jako zmienna w programie ibvunit i w całym IB-System. Nazwa parametru jest dowolna, jednak założeniem jest jej intuicyjność. Dlatego zalecana jest standaryzacja nazw w/g dokumentacji ibprotokołu.
- Rd – flaga (wartość 0 lub 1) oznaczająca czy dany rejestr jest możliwy do odczytu.
- Wr – flaga (wartość 0 lub 1) oznaczająca czy dany rejestr jest możliwy do zapisu
- Min – minimalna wartość jaką może przyjąć rejestr
- Max – maksymalna wartość jaką może przyjąć rejestr
- Presentation – sposób prezentacji zmiennej w programie ibvunit i całym IB-System. Dopuszczalne wartości atrybutu to:
- unsigned – wartość liczbowa całkowita bez znaku. Zakres wartości 0..65535
- signed – wartość liczbowa całkowita ze znakiem. Zakres wartości -32768..32767
- hex – wartość liczbowa w postaci szesnastkowej 0x0000. Zakres wartości 0x0000..0xffff
- SwappBytes - (opcjonalny) jeżeli jest zdefiniowany i jego wartość wynosi „1”, wówczas ibvunit zamienia dwa bajty wartości danego rejestru, w momencie transmisji go do i z urządzenia. Domyślnie bajty nie są zamieniane i przekazywane zgodnie z protokołem MODBUS RTU (SwappBytes=„0”).
<InputRegisters>
<InputRegisters> <!-- multiple <IReg/> elements --> </InputRegisters>
Element InputRegisters jest odpowiedzialna za zdefiniowanie rejestrów urządzenia typu Input Registers z komunikacją MODBUS RTU, które będą dostępne dla programu ibvunit.
Element może zawierać wiele elementów <IReg> lub nie zawierać żadnego takiego elementu.
Każde urządzenie obsługujące zmienne typu InputRegister musi prawidłowo realizować funkcję MODBUS ReadInputRegisters (kod 4) w celu odczytania wartość danego rejestru wejściowego.
Rejestry typu InputRegister są tylko do odczytu.
<IReg>
Element znajdujący się w elemencie <InputRegisters>. Element jest odpowiedzialna za zdefiniowanie pojedynczego rejestru urządzenia typu Input Registers z komunikacją MODBUS RTU
<IReg Addr="0" Name="counter.ht2.tm" Presentation="signed"/>
Element zawiera atrybuty:
- Addr – adres rejestru w urządzeniu zgodnym z MODBUS RTU.
- Name – nazwa własna rejestru. Pod tą nazwą rejestr będzie funkcjonował jako zmienna w programie ibvunit i w całym IB-System. Nazwa parametru jest dowolna, jednak założeniem jest jej intuicyjność. Dlatego zalecana jest standaryzacja nazw w/g dokumentacji ibprotokołu.
- Presentation – sposób prezentacji zmiennej w programie ibvunit i całym IB-System. Dopuszczalne wartości atrybutu to:
- unsigned – wartość liczbowa całkowita bez znaku. Zakres wartości 0..65535
- signed – wartość liczbowa całkowita ze znakiem. Zakres wartości -32768..32767
- hex – wartość liczbowa w postaci szesnastkowej 0x0000. Zakres wartości 0x0000..0xffff
- SwappBytes - (opcjonalny) jeżeli jest zdefiniowany i jego wartość wynosi „1”, wówczas ibvunit zamienia dwa bajty wartości danego rejestru, w momencie transmisji go do i z urządzenia. Domyślnie bajty nie są zamieniane i przekazywane zgodnie z protokołem MODBUS RTU (SwappBytes=„0”).
<Coils>
<CoilsSetMode="Multiple"> <!-- multiple <HReg/> elements --> </Coils>
Element Coils jest odpowiedzialna za zdefiniowanie wyjść dwustanowych urządzenia typu Coils z komunikacją MODBUS RTU, które będą dostępne dla programu ibvunit.
Element może zawierać wiele elementów <Coil> lub nie zawierać żadnego takiego elementu.
Element zawiera atrybuty:
- SetMode - (obowiązkowy) Wartość atrybutu określa czy do ustawienia wartości danego Coil należy użyć funkcji MODBUS ForceSingleCoil czy WriteMultipleCoils. Atrybut może przyjmować wartości:
- Multiple - oznacza, że komunikacja z urządzeniem MODBUS dopuszcza stosowanie hurtowych zapisów dla Coils. Wartość Multiple należy ustawiać tylko dla urządzeń MODBUS poprawnie realizujących funkcje WriteMultipleCoils (kod 15).
- Single - oznacza, że komunikacja z urządzeniem MODBUS dopuszcza stosowanie jedynie pojedynczych zapisów dla Coils. Wartość Single należy ustawiać tylko dla urządzeń MODBUS poprawnie realizujących funkcje ForceSingleCoil (kod 5).
Jeżeli urządzenie wspiera oba tryby, zalecane jest użycie Multiple ze względów wydajnościowych.
Każde urządzenie obsługujące zmienne typu Coils musi prawidłowo realizować przynajmniej jedną z w/w funkcji w celu zmiany danych wyjścia dwustanowego.
Odczyt wyjść dwustanowych realizowany jest przez funkcję MODBUS ReadCoilStatus (kod 1), która również musi być wspierana przez urządzenie.
<Coil>
Element znajdujący się w elemencie <Coils>. Element jest odpowiedzialna za zdefiniowanie pojedynczego wyjścia dwustanowego typu Coils z komunikacją MODBUS RTU
<Coil Addr="0" Name="coil.filter" Rd="1" Wr="1" Min="0" Max="1"/>
Element zawiera atrybuty:
- Addr – adres rejestru w urządzeniu zgodnym z MODBUS RTU.
- Name – nazwa własna rejestru. Pod tą nazwą rejestr będzie funkcjonował jako zmienna w programie ibvunit i w całym IB-System. Nazwa parametru jest dowolna, jednak założeniem jest jej intuicyjność. Dlatego zalecana jest standaryzacja nazw w/g dokumentacji ibprotokołu.
- Rd – flaga (wartość 0 lub 1) oznaczająca czy dany rejestr jest możliwy do odczytu.
- Wr – flaga (wartość 0 lub 1) oznaczająca czy dany rejestr jest możliwy do zapisu
- Min – minimalna wartość jaką może przyjąć rejestr
- Max – maksymalna wartość jaką może przyjąć rejestr
<DiscreteInputs>
<DiscreteInputs> <!-- multiple <DInput/> elements --> </DiscreteInputs>
Element DiscreteInputs jest odpowiedzialna za zdefiniowanie wejść dwustanowych urządzenia typu Discrete Inputs z komunikacją MODBUS RTU, które będą dostępne dla programu ibvunit.
Element może zawierać wiele elementów <DInput> lub nie zawierać żadnego takiego elementu.
Każde urządzenie obsługujące zmienne typu DiscreteInputs musi prawidłowo realizować funkcję MODBUS ReadInputStatus (kod 2) w celu odczytania wartość danego wejścia dwustanowego.
Rejestry typu DiscreteInputs są tylko do odczytu.
<DInput>
Element znajdujący się w elemencie <DiscreteInputs>. Element jest odpowiedzialna za zdefiniowanie pojedynczego wejścia dwustanowego typu Discrete Inputs z komunikacją MODBUS RTU
<DInput Addr="0" Name="disc.gwc.on"/>
Element zawiera atrybuty:
- Addr – adres rejestru w urządzeniu zgodnym z MODBUS RTU.
- Name – nazwa własna rejestru. Pod tą nazwą rejestr będzie funkcjonował jako zmienna w programie ibvunit i w całym IB-System. Nazwa parametru jest dowolna, jednak założeniem jest jej intuicyjność. Dlatego zalecana jest standaryzacja nazw w/g dokumentacji ibprotokołu.