OH 2.5, Modbus i dw...
 
Powiadomienia
Wyczyść wszystko

openHAB OH 2.5, Modbus i dwa (lub więcej) urządzenia

grzesiekk
(@grzesiekk)
Młodzik

Witam wszystkich jeszcze raz.

 

Mam OH na raspberry pi 3. Dołożony interfejs RS485. Zainstalowany bindings modbus. Skonfigurowane pobieranie danych z przetwornika Lume P43 i działa:

Bridge modbus:serial:MeterMaster "MeterMaster" @ "Power" [ port="/dev/ttyAMA0", id=2, baud=9600, stopBits="2.0", parity="none", dataBits=8, encoding="rtu" ] {

 

Bridge poller holding1 @ "Power" [ start=7000, length=70, refresh=5000, type="holding" ] {
// Napiecie L1
Thing data inputVL1 @ "Power" [ readStart="7000", readValueType="float32" ]
// Napięcie L2
Thing data inputVL2 @ "Power" [ readStart="7014", readValueType="float32" ]
// Napięcie L3
Thing data inputVL3 @ "Power" [ readStart="7028", readValueType="float32" ]

 

// Prąd L1
Thing data inputAL1 @ "Power" [ readStart="7002", readValueType="float32" ]
// Prąd L2
Thing data inputAL2 @ "Power" [ readStart="7016", readValueType="float32" ]
// Prąd L3
Thing data inputAL3 @ "Power" [ readStart="7030", readValueType="float32" ]

 

// Moc W L1
Thing data inputWL1 @ "Power" [ readStart="7004", readValueType="float32" ]
// Moc W L2
Thing data inputWL2 @ "Power" [ readStart="7018", readValueType="float32" ]
// Moc W L3
Thing data inputWL3 @ "Power" [ readStart="7032", readValueType="float32" ]

 

// Moc Czynna Total
Thing data inputWTotal @ "Power" [ readStart="7046", readValueType="float32" ]
// Moc Bierna Total
Thing data inputQTotal @ "Power" [ readStart="7048", readValueType="float32" ]
// Moc Pozorna Total
Thing data inputSTotal @ "Power" [ readStart="7050", readValueType="float32" ]
}
Bridge poller holding2 @ "Power" [ start=7100, length=40, refresh=5000, type="holding" ] {

 

// Energia czynna pobierana kWh
Thing data inputkWh @ "Power" [ readStart="7114", readValueType="float32" ]
// Energia bierna indukcyjna pobierana kVarh
Thing data inputHkVarh @ "Power" [ readStart="7118", readValueType="float32" ]
// Energia bierna pojemnościowa pobierana kVarh
Thing data inputFkVarh @ "Power" [ readStart="7132", readValueType="float32" ]

 

// Energia czynna oddawana kWh
Thing data outputkWh @ "Power" [ readStart="7128", readValueType="float32" ]
}

 

}

Do tego na jednej magistrali podpięte mam 3 liczniki LE01-MR firmy F&F i w żaden sposób nie mogę uzyskać z nich odczytów.

Konfiguracja np taka:

Bridge modbus:serial:MeterLamp1 "MeterLamp1" @ "Power" [ port="/dev/ttyAMA0", id=10, baud=9600, stopBits="1.0", parity="none", dataBits=8, encoding="rtu" ] {

 

Bridge poller input1 @ "Power" [ start=305, length=38, refresh=5000, type="holding" ] {
// Napięcie
Thing data inputV @ "Power" [ readStart="305", readValueType="uint16" ]
}
}

Według dokumentacji napięcie można odczytywać z rejestru holding o numerze 305.

bezpośredni odczyt magistrali i urządzenia na rpi (z działającym oh) daje poprawny odczyt:

openhabian@openhabianpi:/home/pi/modpoll/linux_arm-eabihf $ sudo ./modpoll -b 9600 -p none -s 1 -m rtu -a 10 -r 306 -c 1 -t 4 -1 /dev/ttyAMA0
modpoll 3.9 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2020 proconX Pty Ltd
Visit  https://www.modbusdriver.com  for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC3
Slave configuration...: address = 10, start reference = 306, count = 1
Communication.........: /dev/ttyAMA0, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table

-- Polling slave...
[306]: 23055

Dopiszę jeszcze, że bez różnicy jest co wpiszę w parametrach Bridge poller dla tego licznika:

start=305, 306, 300, itp

length=1, więcej

readStart=0, 1, 305 (w cudzysłowach czy bez)

readValueType= różne typy

Dostaję w logach openhab.log:

2021-02-10 10:25:35.483 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint@1de5e28[slaveId=10,functionCode=READ_MULTIPLE_REGISTERS,start=306,length=1,maxTries=3]). Will try again soon. Error was I/O error, so reseting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: IOException CRC Error in received frame: 0 bytes: [operation ID 12db37a5-f490-4b33-8e3b-beb462d49336]
2021-02-10 10:25:35.983 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 2 out of 3 failed when executing request (ModbusReadRequestBlueprint@1de5e28[slaveId=10,functionCode=READ_MULTIPLE_REGISTERS,start=306,length=1,maxTries=3]). Will try again soon. Error was I/O error, so reseting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: IOException CRC Error in received frame: 0 bytes: [operation ID 12db37a5-f490-4b33-8e3b-beb462d49336]
2021-02-10 10:25:37.006 [ERROR] [rt.modbus.internal.ModbusManagerImpl] - Last try 3 failed when executing request (ModbusReadRequestBlueprint@1de5e28[slaveId=10,functionCode=READ_MULTIPLE_REGISTERS,start=306,length=1,maxTries=3]). Aborting. Error was I/O error, so reseting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: IOException CRC Error in received frame: 0 bytes: [operation ID 12db37a5-f490-4b33-8e3b-beb462d49336]

 

Każda próba odczytania wartości z magistrali czym innym niż OH kończy się sukcesem.

OH poprostu nie odczytuje mi danych z licznika (oczywiście z pierwszego MeterMaster wartości odczytuje poprawnie)

 

Zamówiłem interfejs do RP taki z dwoma portami, zobaczymy czy wtedy będzie lepiej.

Nie mniej jednak, czy ktoś ma jakiś pomysł żeby zmusić OH do odczytywania wartości?

 

Cytuj
Autor tematu Dodane : 10/02/2021 10:31 am
isom
 isom
(@isom)
Prezes Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20

@grzesiekk jak używasz konwertera bez izolacji galwanicznej to obsłużysz tylko jeden licznik - urządzenie 

OdpowiedzCytuj
Dodane : 10/02/2021 11:47 am
grzesiekk
(@grzesiekk)
Młodzik

@isom Używam RS485 CAN HAT - nakładka dla Raspberry Pi - Waveshare 14882.

Co to znaczy że obsłużę tylko jeden licznik? podłączone mam do magistrali w jednym czasie 4 liczniki (p43 oraz 3x le01mr) i programikiem modpoll mogę odpytywać każdy z nich. Dlaczego OH miałby tyego nie umieć i było by to uzależnione od galwanicznej seperacji?

W sumie mam już zamówiony konwerter z galwaniczną seperacją. Zobaczymy co będzie w jego przypadku. Jednak ten argument jakoś do mnie nie trafia - zwłaszcza że tak jak pisałem modpoll odczytuje to co potrzebuję.

OdpowiedzCytuj
Autor tematu Dodane : 10/02/2021 1:03 pm
isom
 isom
(@isom)
Prezes Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20

@grzesiekk to spróbuj "programikiem" odpytać wszystkie na raz , a się przekonasz . Taka jest różnica że programikiem odpytujesz jeden licznik a w OH chcesz wszystkie cztery.

Separacja pozwala na transmisję niezależną a zwykły konwerter już nie . Nie umiem tego prościej nazwać 

OdpowiedzCytuj
Dodane : 10/02/2021 1:47 pm
grzesiekk
(@grzesiekk)
Młodzik

@isom trochę na elektronice się znam i według mnie seperacja galwaniczna w przypadku przetwornika rs485 jest po to żeby elektronikę i napięcia panujące na urządzeniach pomiarowych/sterowniczych odseparować całkowicie od PLC. jakimiś optotranzystorami, optodiodami czy optotriakami. Żeby ewentualne przepięcia nie przeszły na PLC.

Natomiast... oczywiście że odpytywanie programikiem jest robione w sposób jeden po drugim. A czy OH odpytuje wszystkie skonfigurowane urządzenia modbus JEDNOCZEŚNIE czy wrzuca je do jakiejś kolejki? Przecież P43 który mam też nie odpytuje w jednej chwili wszystkich zmiennych tylko w jakiejś kolejności.

Dzisiaj nie dam rady ale spróbuję wsadzić monitor rs485 na linię i zobaczę o co pyta programik a o co pyta OH.

Wydaje mi się że odpowiedzią na moje pytanie które postawiłem na początku było by albo poprawnienie konfiguracji (jeśli jest błąd) albo stwierdzenie że OH nie potrafi odpytywać więcej niż 1 urządzenia na jednej magistrali rs485 (a tego nie jestem pewny gdyż znalazłem w internecie na forach posty że to działa).

 

OdpowiedzCytuj
Autor tematu Dodane : 10/02/2021 2:36 pm
kamiKAC
(@kamikac)
Majster

@grzesiekk Ja widzę tylko jedną rzecz, która może powodować problemy: w Lume masz 2 bity stopu a w liczniku 1. Jeśli port nie jest zamykany pomiędzy odczytami, to transmisja może za każdym razem mieć te same parametry (2 bity stopu) i nie zadziała. Nie da się tego ujednolicić zmieniając konfigurację któregoś urządzenia?

I spróbuj zmienić Power na np Power1, bo poller nie jest jednoznacznie przypisany do definicji urządzenia. Wydaje mi się, że wszystkie pollery w tym przypadku są przypisane do jednego urządzenia (Lume) i dlatego nie działa.

OdpowiedzCytuj
Dodane : 12/02/2021 1:04 am
grzesiekk
(@grzesiekk)
Młodzik

@kamikac @ "Power" - to jest grupa/zakładka w OH Paper UI. pollery jak popatrzysz mają różne nazwy.

Z tymi bitami stopu może masz rację, myślałem o tym ale zmyliło mnie że modpoll działa poprawnie.

Oczywiście że da się to ujednolicić. Spróbuję po weekendzie to zrobić. Dam znać czy zadziałało.

OdpowiedzCytuj
Autor tematu Dodane : 12/02/2021 12:20 pm
grzesiekk
(@grzesiekk)
Młodzik

@kamikac dziękuje za nakierowanie na rozwiązanie.

W tych licznikach nie mogłem ustawić 8N2, ma tylko 8N1 ale za to w lumelu mogłem przestawić z 8M2 na 8N1 - i tak wszystkie urządzenia na tej magistrali korzystają z ustawień 8N1. Licznik zaczał się odpytywać, póki co jeden rejestr 🙂 Teraz tylko dołożyć kolejne rejestry i liczniki w OH.

OdpowiedzCytuj
Autor tematu Dodane : 19/02/2021 2:30 pm
Udostępnij: