UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam,
zaraziłem się 16 kanałowym modułem sterowanym przez MODBUS od wschodnich "przyjaciół" ale za nic nie mogę się z nim połączyć przez konwerter. Ingo od sprzedającego jest standardowe - żadne. Odczytywany rejestr powinien być 03 lub w innej wersji 04 zależy od... kto wie. Konwerter działa poprawnie bo już odczytuje na bieżąco z licznika energii. Co do adresu teoretycznie jest ustawiony na 2 (dipswitch A1). Konfiguracja RSa niby zgodna. Do czego można się tu jeszcze doczepć?
Tak patrzę na te moduły , i z opisu wynika ,że przełącznikiem to się prędkość wybiera , a nie adres modbusa....
No i dodatkowo oprócz komand modbusa obsługuje jeszcze komendy AT , może spóbuj się podłączyć zwykłym putty ustawionym na serial , z odpowiednią prędkością , i wpisz ATI , może jakieś informacje się pojawią.
No właśnie z twego co ja znalazłem....
o ile to ta wersja. Np są wersje gdzie rodzaj sterowania (AT lub MODBUS) wybiera się przez zworkę
No to wg tego drugiego odczyt powinien być wykonany funkcją 06 ( choć oficialna nazwa Write Single Registar mało do tego pasuje).
Pytałeś się Chińczyka o instrukcję , albo chociaż o rejestr adresów ?
Jakim programem to robisz ? Widzisz dokładnie to co jest wysyłane po porcie szeregowym ?
Ok , ale żeby chociaż coś mieć na sztywno ( np rejestry ) , to można by na siłę wprowadzać/zmieniać adres , komunikację itp. a tak to za dużo zmiennych.
Chociaż żeby przykładową komendę modbus zdobyć , np tą komendą załącza się przekaźnik nr... , albo tą komendą odczytujesz stan ...
Ja używam qModMaster , widać co wysyła itp.
Ok , ale co konkretnie i jakim programem wysyłasz ?
@mig41 Jak dobrze pamiętam pisownie to ModbusView TCP, próbowałem na id od 2 do 4 i nic
OK zdobyłem jakiś chiński konwerter USB/RS485
Skanowanie zwraca błąd, a putty zwraca puste okno terminala
Opis
Definicje dla każdego pola są wymienione w następujący sposób.
- Identyfikator urządzenia podrzędnego (numer karty [0 - 31] ustawiany za pomocą przełącznika DIP na karcie przekaźnika)
- Funkcja (Wartość = 6 : kontrola)
- Adres ( [ 1 - 16 ] numer przekaźnika)
- Działanie
- otwarty (włącz przełącznik)
- zamknąć (wyłączyć przełącznik)
- przełącznik (samoblokujący)
- zatrzask (blokujący)
- chwilowy (bez blokady)
- opóźnienie (odpowiednio ustawić okres)
- openall (otwórz wszystkie przekaźniki)
- zamknij wszystkie przekaźniki (zamknij wszystkie przekaźniki)
- Opóźnienie (czas trwania w sekundach [ 0 - 255 ])
Załączenie 1PK togg 02 06 00 01 03 00
Załączenie 2PK togg 02 06 00 02 03 00 itd..
wysyłam innym programem
Czyli juz wszystko działa ?
@mig41 w połowie tak 🙃
Nie potrafię wysterować z Twojego programu ani przez TCP a na tym jedynie mi zależy.
@mig41 Może niepotrzebnie pcham się tą drogą ale dlaczego qModMaster nie mogę się połączyć z płytką?
qModMaster ma też tcp więc może by zagościł u mnie dłużej.
Tylko ni w ząb nie chce się łączyć
Podłączyłem do konwertera rs485/tcp płytkę.
Adres ustawiony na 2.
QModMaster albo wprowadza mnie w błąd albo nie wiem co robię źle.
Przesunięcie adresu - 1PK to adres 2
wysyłam 0300 wyskakuje błąd i 1 przekaźnik się załącza na chwilę i puszcza co ciekawe w dowolnej chwili przestaje reagować żeby zacząć działać kiedy mu się zachce.
I chyba w losowych sytuacja zapala się kilka przekaźników na około 1s jakby dostawały od czegoś polecenie....
Poddaję się. Zamówiłem oddzielny konwerter RS485/Ethernet.
Nie mam się już czego doczepić, może obecne urządzenie jakoś zakłóca/blokuje komunikacje z przekaźnikami
Zobaczymy w Piątek.
Hej 🙂
Oddzielny konwerter przyszedł.
Do rozpracowania dlaczego komunikacja na oddzielnym konwerterze na tych samych nastawach działa (nie było konfliktu ID)
Wyłożyłem się na komunikacji z OH
Bridge modbus:tcp:Przekazniki "Przekaźniki" [ host="192.168.ZZ.ZZ", port=4196, id=2] { Bridge poller holding "Przekaźniki strych" [ start=4000, length=16, refresh=1000, type="holding" ] { Thing data PK1 "PK1" [ writeStart="4001", writeValueType="int16", writeType="holding" ] Thing data PK2 "PK2" [ writeStart="4002", writeValueType="int16", writeType="holding" ] Thing data PK3 "PK3" [ writeStart="4003", writeValueType="int16", writeType="holding" ] Thing data PK4 "PK4" [ writeStart="4004", writeValueType="int16", writeType="holding" ] } }
Czy na pewno dla FC6 ma być holdning i jak uzyskać adres do zapisu?
FC6 to 4001-40016 dla mnie?
błędy:
09:28:38.456 [INFO ] [del.core.internal.ModelRepositoryImpl] - Loading model 'Przekazniki.things' 09:28:38.484 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:poller:Przekazniki:holding' changed from OFFLINE (COMMUNICATION_ERROR): Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveIOExceptionImpl: Modbus IO Error with cause=ModbusIOException, EOF=false, message='I/O exception: SocketTimeoutException Read timed out', cause2=null to OFFLINE 09:28:38.486 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:poller:Przekazniki:holding' changed from OFFLINE (COMMUNICATION_ERROR): Error with read: org.openhab.core.io.transport.modbus.internal.ModbusSlaveIOExceptionImpl: Modbus IO Error with cause=ModbusIOException, EOF=false, message='I/O exception: SocketTimeoutException Read timed out', cause2=null to ONLINE 09:28:38.489 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK1' changed from OFFLINE (BRIDGE_OFFLINE): No online bridge to ONLINE 09:28:38.490 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK4' changed from OFFLINE (BRIDGE_OFFLINE): No online bridge to ONLINE 09:28:38.491 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK2' changed from OFFLINE (BRIDGE_OFFLINE): No online bridge to ONLINE 09:28:38.491 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK3' changed from OFFLINE (BRIDGE_OFFLINE): No online bridge to ONLINE 09:28:38.494 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK1' changed from OFFLINE (BRIDGE_OFFLINE): No online bridge to ONLINE 09:28:38.806 [WARN ] [ort.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=4000, length=16, maxTries=3]). Will try again soon. Error was I/O error, so resetting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: SocketTimeoutException Read timed out [operation ID 9fbcd7da-0d95-43de-92db-ca4143bcc065] 09:28:38.808 [WARN ] [ort.modbus.internal.ModbusManagerImpl] - Error getting a new connection for endpoint ModbusIPSlaveEndpoint [address=192.168.ZZ.ZZ, port=4196]. Error was: java.lang.InterruptedException null 09:28:38.808 [WARN ] [ort.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusIPSlaveEndpoint [address=192.168.ZZ.ZZ, port=4196] -- aborting request ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=4000, length=16, maxTries=3] [operation ID 9fbcd7da-0d95-43de-92db-ca4143bcc065] 09:28:38.810 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:poller:Przekazniki:holding' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Error with read: org.openhab.core.io.transport.modbus.exception.ModbusConnectionException: Error connecting to endpoint ModbusIPSlaveEndpoint [address=192.168.ZZ.ZZ, port=4196] 09:28:38.812 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK2' changed from ONLINE to OFFLINE (BRIDGE_OFFLINE): No online bridge 09:28:38.813 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK4' changed from ONLINE to OFFLINE (BRIDGE_OFFLINE): No online bridge 09:28:38.814 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK1' changed from ONLINE to OFFLINE (BRIDGE_OFFLINE): No online bridge 09:28:38.815 [INFO ] [hab.event.ThingStatusInfoChangedEvent] - Thing 'modbus:data:Przekazniki:holding:PK3' changed from ONLINE to OFFLINE (BRIDGE_OFFLINE): No online bridge ^C~
i coś jaby z komunikacja z konwerterem kuleje?
Most i połączenia działają, nie rozumiem dlaczego adresy muszę pisać od 1 bez"4000x" czy połączenie OH samo to uzupełnia?
Bridge modbus:tcp:Przekazniki "Przekaźniki Bridge" [ host="192.168.xx.xx", port=4196, id=2] { Bridge poller PkStrych "Przekaźniki strych" [ start=1, length=16, refresh=1000, type="holding" ] { Thing data PK1 "PK1" [ writeStart="1", writeValueType="int16", writeType="holding" ] Thing data PK2 "PK2" [ writeStart="2", writeValueType="int16", writeType="holding" ] Thing data PK3 "PK3" [ writeStart="3", writeValueType="int16", writeType="holding" ] Thing data PK4 "PK4" [ writeStart="4", writeValueType="int16", writeType="holding" ] } }
items
Number Pk1S "Przekaźnik 1" {channel="modbus:data:Przekazniki:PkStrych:PK1:number"} Number Pk2S "Przekaźnik 2" {channel="modbus:data:Przekazniki:PkStrych:PK2:number"} Number Pk3S "Przekaźnik 3" {channel="modbus:data:Przekazniki:PkStrych:PK3:number"} Number Pk4S "Przekaźnik 4" {channel="modbus:data:Przekazniki:PkStrych:PK4:number"} Number Pk5S "Przekaźnik 5" {channel="modbus:data:Przekazniki:PkStrych:PK5:number"} Number Pk6S "Przekaźnik 6" {channel="modbus:data:Przekazniki:PkStrych:PK6:number"} Number Pk7S "Przekaźnik 7" {channel="modbus:data:Przekazniki:PkStrych:PK7:number"} Number Pk8S "Przekaźnik 8" {channel="modbus:data:Przekazniki:PkStrych:PK8:number"} Number Pk9S "Przekaźnik 9" {channel="modbus:data:Przekazniki:PkStrych:PK9:number"} Number Pk10S "Przekaźnik 10" {channel="modbus:data:Przekazniki:PkStrych:PK10:number"} Number Pk11S "Przekaźnik 11" {channel="modbus:data:Przekazniki:PkStrych:PK11:number"} Number Pk12S "Przekaźnik 12" {channel="modbus:data:Przekazniki:PkStrych:PK12:number"} Number Pk13S "Przekaźnik 13" {channel="modbus:data:Przekazniki:PkStrych:PK13:number"}
Teraz męczę próbę zapisu włącz/wyłącz ale staje kością w gardle 😉
Najlepiej komponent typu switch bez dodatkowych reguł czy zasad...
Odświeżam ;D
może problem w tym ze używam poller... choć może nie ;(
poller |
Most | Rzecz zajmująca się odpytywaniem danych z modbus slave'ów. Jeden odpytujący odpowiada pojedynczemu żądaniu odczytu Modbus (FC01, FC02, FC03 lub FC04). Jest dzieckiem tcp lub serial . |
Wiązanie może również zapisywać dane do urządzeń podrzędnych Modbus przy użyciu FC05 (zapis pojedynczej cewki), FC06 (zapis pojedynczego rejestru), FC15 (zapis wielu cewek) lub FC16 (zapis wielu rejestrów).
bez efektu... choć niby coś poszło
15:13:59.621 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Successful write, matching request ModbusWriteRegisterRequestBlueprint [slaveId=2, reference=2, registers=ModbusRegisterArray(0001), maxTries=3, getFunctionCode()=WRITE_SINGLE_REGISTER] 15:13:59.929 [DEBUG] [dbus.handler.ModbusPollerThingHandler] - Thing modbus:poller:Przekazniki:PkStrych received response PollResult(result=AsyncModbusReadResult(request = ModbusReadRequestBlueprint [slaveId=2, functionCode=READ_MULTIPLE_REGISTERS, start=3, length=12, maxTries=3], registers = ModbusRegisterArray(000000000000000000000000000000000000000000000000)))
odczyt wskazuje że jeden przekaźnik określają 4 bity- 4pk załączone i 5 off
[DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:Przekazniki:PkStrych:Pk1 channels updated: null. readValueType=int16, readIndex=Optional[3], readSubIndex(or 0)=0, extractIndex=1 -> numeric value 1 and boolValue=true. Registers ModbusRegisterArray(00010001000100000000) for request ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_MULTIPLE_REGISTERS, start=2, length=5, maxTries=3]