Zmiana bitów w ramc...
 
Powiadomienia
Wyczyść wszystko

openHAB [Rozwiązany] Zmiana bitów w ramce modbus

54 Wpisów
3 Użytkownicy
0 Likes
1,464 Wyświetleń
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

i tym sposobem OH zrobił papa :/

Pół godziny mędze się nad przywróceniem systemu....szczęście garbatego...

Udało się mój OH chyba prosi o świeżą instalację jeszcze w tym roku ;(

log błędy w komunikacji

Try 1 out of 3 failed when executing request (ModbusWriteRegisterRequestBlueprint [slaveId=1, reference=1, registers=ModbusRegisterArray(02000100), maxTries=3, getFunctionCode()=WRITE_MULTIPLE_REGISTERS]). 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 b281ae64-78f3-4dfd-8fe0-787c45479812]

 

 
Dodane : 25/08/2023 1:08 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Nie ogarniam co robię źle, wydaje mi się że wszystko jest ok a nie działa. 

Żeby nie stać w miejscu zabrałem się za część wykonawczą.

 

1692980245903

 

Opisy na przekaźnikach do zmiany, nieco porządku w przewodach do tego przetwornice 24/12v i można zamykać obudowę.

 
Dodane : 25/08/2023 6:22 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Obsługa na 16bitowych rejestrach śmiga a na 32 jak proponowałeś ni w ząb.

Jak masz jeszcze siłę i chęci to skrobnij co robię źle.

 
Dodane : 25/08/2023 8:51 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 Nieststy wpuściłem Cie w maliny z tym 32-bitowym podejściem - zapis 2 rejestrów wykorzystuje FC16, a ten moduł przekaźnikowy obsługuje tylko FC06. Można to obejść definiując writeTransform z JSONem jak kilka postów temu. W JSONie umieścić najpierw wyłączenie jednego przekaźnika a następnie załączenie drugiego (FC06).

 
Dodane : 25/08/2023 9:28 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

No właśnie mi nie pasowało ale maliny smaczne xd

Kończy mi się drukować podstawa przetwornicy i składam skrzynkę.

 

Za to wspomniałeś coś o prezentacji postępu rolety. Masz to zrobione? Z pół roku temu sporo czasu zmarnowałem na to i było źle lub fatalnie 🤣 

 
Dodane : 25/08/2023 9:33 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 U mnie roletami zarządza PLC. Z OH idzie tylko sygnał UP lub DOWN (2 bity) oraz STOP (zerowanie tych bitów) a zwrotnie pozycja rolety. W Tasmocie można zarządzać roletami, ale musiałbyś mieć inny moduł przekaźników :/

 

A skrzynka ładna 🙂

 
Dodane : 25/08/2023 10:51 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

U mnie PLC sterowało bezpośrednio PK od rolet a przyciski od oświetlenia po dłuższym przytrzymaniu dodatkowo mogły sterować góra dół.

Teraz przeszedłem na modbus raz żeby poćwiczyć konfigurację tego typu modułów (w przyszłości będę chciał dołożyć dwie szt do czeluści piwnic ;)), dwa zwolnić przewód sterowniczy który będzie potrzebny do innych celów na rzecz skrętki dla modbus i trzy odzyskam 8 wyjść w PLC.

Liczę że te skromne funkcje które miałem przerzucę teraz z PLC na OH i modbus.

Nie chcę eksperymentować z niespodziankami shelly tuya i innymi chińskimi modami esp. Pół roku temu musiałem wpuścić do domu taką tuyę i wymieniłem w niej po miesiącu esp co ciekawe układ który tam był oryginalnie miał inne oznaczenia kolory itp żeby stważać pozory bycia czymś innym niż esp. Potem padł tranzystor wykonawczy który steruje taśmą LED 5cm i obecnie z Tuya został tylko układ zasilający.

 

Co do pozycji zaawansowany sterownik rolety ma funkcje góra/dół i po zabraniu zasilania stop, a jesli chodzi o info zwrotne to jest bardzo nieśmiały i milczy.

 

Znając czas ruchu w górę i w dół nie można by uderzyć w ten sposób? Nie jest to super dokłądne ale zawsze i dorobić zerowanie w pozycji w GMP?

var Number currentPosition = 0 // Zmienna przechowująca symulowaną pozycję
var Number upTime = 24000 // Czas ruchu w górę (24 sekundy)
var Number downTime = 21000 // Czas ruchu w dół (21 sekundy)

rule "Rolety jadalnia"
when
    Item RolJad received command
then
    switch(receivedCommand) {
        case UP: {
            // Rozpocznij ruch w górę, zaktualizuj pozycję na podstawie czasu
            currentPosition = Math.min(currentPosition + 1, 100)
            // Aktualizuj pozycję w elemencie Rollershutter
            RolJad.sendCommand(currentPosition)
            // Ustaw timer, aby po pewnym czasie zatrzymać ruch
            createTimer(now.plusMillis(upTime), [ |
                currentPosition = 0
                RolJad.sendCommand(currentPosition)
            ])
        }
        case STOP: {
            // Zatrzymaj ruch, nie zmieniaj pozycji
            // Zatrzymaj również wszelkie trwające timery
            currentPosition = 0
            RolJad.sendCommand(currentPosition)
            timers.forEach[timer | timer.cancel]
        }
        case DOWN: {
            // Rozpocznij ruch w dół, zaktualizuj pozycję na podstawie czasu
            currentPosition = Math.max(currentPosition - 1, 0)
            // Aktualizuj pozycję w elemencie Rollershutter
            RolJad.sendCommand(currentPosition)
            // Ustaw timer, aby po pewnym czasie zatrzymać ruch
            createTimer(now.plusMillis(downTime), [ |
                currentPosition = 0
                RolJad.sendCommand(currentPosition)
            ])
        }
        default : {
            // Inne przypadki
        }
    }
end

i inna wersja 

// Poniższe czasy ruchu w górę i w dół dla każdej rolety
val upTimes = newHashMap(
    "RolJad" -> 24000,
    "RolDzi" -> 22000,
    "RolSyp" -> 25000,
    "RolDzie" -> 23000,
    "RolPrac1" -> 26000,
    "RolPrac2" -> 21000
)

val downTimes = newHashMap(
    "RolJad" -> 21000,
    "RolDzi" -> 23000,
    "RolSyp" -> 22000,
    "RolDzie" -> 24000, 
    "RolPrac1" -> 21000,
    "RolPrac2" -> 25000
)

rule "Simulate Roller Position - RolDzie"
when
    Item RolDzie received command // Oczekuj zmian na elemencie Roleta Dzieci
then
    val rollerItem = RolDzie
    val currentPosition = rollerItem.state as Number
    val selectedUpTime = upTimes.get("RolDzie")
    val selectedDownTime = downTimes.get("RolDzie")
        
    switch(receivedCommand) {
        // reszta kodu...
    }
end
Setpoint item=RolJad label="Roleta Jadalnia [%d %%]" minValue=0 maxValue=100 step=10
Setpoint item=RolDzi label="Roleta Dzieci [%d %%]" minValue=0 maxValue=100 step=10
Setpoint item=RolSyp label="Roleta Sypialnia [%d %%]" minValue=0 maxValue=100 step=10
Setpoint item=RolDzie label="Roleta Salon [%d %%]" minValue=0 maxValue=100 step=10

Myślisz że miałoby to rację bytu?

 

A skrzynka ładna 🙂 - Dziękuję nie jest to pro ale działa i w razie zgonu funkcje PK i żył opisane (a niech tyle mają łatwiej ;p)

 

 

 
Dodane : 26/08/2023 8:15 am
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 Wydaje mi się, że to nie zadziała, bo:

W OH4 jest specjalny profil dla rolet bez informacji o pozycji - sam ją oblicza: https://www.openhab.org/addons/transformations/rollershutterposition/

A PLC nie potrafi obsłużyć tych przekaźników po MODBUSie i obliczyć ich pozycji?

Pozdrawiam

 
Dodane : 28/08/2023 10:04 am
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

@kamikac 

Wiesz nie zastanawiałem się nap połączeniem z PLC. Może i byłoby lepiej w końcu lepsza niezawodność niż OH, ale czy Fatek obliczy położenie to nie wiem, nie próbowałem czegoś takiego.

 

Wracam do domu dopiero z końcem tyg ale może przez teamviewer coś się uda podziałać 😉

 

Ustawiam port 4 na parametry płyki 9600 8N1

Wrzucam marker M1962 dla enable funkcji 150. Modbus Master. port 4, R1000, R3000

Tabela Modbus ID1 odczyt, size 8, Master Start adres R100, Slave Start adres 300001 lub 400001

Karta stanu rejesrtrów R0-R7 wszystkie 0 nie ważne jaki stan jest obecnie na płytce.

 

Itak myślę garaż ma PLC Fatek ID1 z katrą sieciową Dom PLC Fatek ID2 z kartą sieciową, Garaż sterownik ogrzewania z konwerteram MB/eth ID4, obecne PK z konwerterem MB/eth ID1 <- powinien być konflikt? bo go nie widzę, Licznik energii z konwerterem MB/eth ID1

każdy konwerter ma swój adres IP więc konfliktów nie ma/ nie widzę ale za to karta stanu martwa, jak ustawiam port karty sieciowej fateka to ona pracuje na 307200 8E1 i jest to pobierane z automatu z karty a w programie do konfig karty nie ma możliwości ustawiania.

 

 
Dodane : 28/08/2023 6:02 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 Z fatekiem Ci nie pomogę, ale teoretycznie nie ma konfliktów, bo to różne IP. Ale czy nie jesteś podpięty jednocześnie przez OH, a konwerter ETH/MODBUS obsługuje tylko jedno połączenie?

 
Dodane : 01/09/2023 10:15 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Doczekałem się przyszedł moduł wejść cyfrowych z Ali 😉

Podłączyłem na pewniaka obok modułu z PK nadałem inne ID i komunikacja z PK padła (prawdopodobnie dlatego że PK ma ID4 a DI ma ID1 i próbuje na siłę łączyć się z pierwszym ID z brzegu a resztę zlewa)

Bridge modbus:tcp:DI "DI Bridge" [ host="192.168.86.201", port=4196, id=1] {
    Bridge poller DIStrych "DIS" [ start=1, length=16, refresh=1000, type="holding" ] {
       Thing    data DI1   "DI1"        [ readStart="1", readValueType="int16", writeStart="1", writeValueType="int16",  writeType="holding" ]
       Thing    data DI2   "DI2"        [ readStart="2", readValueType="int16", writeStart="2", writeValueType="int16",  writeType="holding" ]
       Thing    data DI3   "DI3"        [ readStart="3", readValueType="int16", writeStart="3", writeValueType="int16",  writeType="holding" ]
       Thing    data DI4   "DI4"        [ readStart="4", readValueType="int16", writeStart="4", writeValueType="int16",  writeType="holding" ]
       Thing    data DI5   "DI5"        [ readStart="5", readValueType="int16", writeStart="5", writeValueType="int16",  writeType="holding" ]
       Thing    data DI6   "DI6"        [ readStart="6", readValueType="int16", writeStart="6", writeValueType="int16",  writeType="holding" ]
       Thing    data DI7   "DI7"        [ readStart="7", readValueType="int16", writeStart="7", writeValueType="int16",  writeType="holding" ]
       Thing    data DI8   "DI8"        [ readStart="8", readValueType="int16", writeStart="8", writeValueType="int16",  writeType="holding" ]
       Thing    data DI9   "DI9"        [ readStart="9", readValueType="int16", writeStart="9", writeValueType="int16",  writeType="holding" ]
       Thing    data DI10  "DI10"       [ readStart="10", readValueType="int16", writeStart="10", writeValueType="int16",  writeType="holding" ]
       Thing    data DI11  "DI11"       [ readStart="11", readValueType="int16", writeStart="11", writeValueType="int16",  writeType="holding" ]
       Thing    data DI12  "DI12"       [ readStart="12", readValueType="int16", writeStart="12", writeValueType="int16",  writeType="holding" ]
       Thing    data DI13  "DI13"       [ readStart="13", readValueType="int16", writeStart="13", writeValueType="int16",  writeType="holding" ]
       Thing    data DI14  "DI14"       [ readStart="14", readValueType="int16", writeStart="14", writeValueType="int16",  writeType="holding" ]
       Thing    data DI15  "DI15"       [ readStart="15", readValueType="int16", writeStart="15", writeValueType="int16",  writeType="holding" ]
       Thing    data DI16  "DI16"       [ readStart="16", readValueType="int16", writeStart="16", writeValueType="int16",  writeType="holding" ]

       }
}    
Contact          DI1S          "DI 1"          {channel="modbus:data:DI:DIStrych:DI1:contact"}
Contact          DI2S          "DI 2"          {channel="modbus:data:DI:DIStrych:DI2:contact"}
Contact          DI3S          "DI 3"          {channel="modbus:data:DI:DIStrych:DI3:contact"}
Contact          DI4S          "DI 4"          {channel="modbus:data:DI:DIStrych:DI4:contact"}
Contact          DI5S          "DI 5"          {channel="modbus:data:DI:DIStrych:DI5:contact"} 
Contact          DI6S          "DI 6"          {channel="modbus:data:DI:DIStrych:DI6:contact"}
Contact          DI7S          "DI 7"          {channel="modbus:data:DI:DIStrych:DI7:contact"}
Contact          DI8S          "DI 8"          {channel="modbus:data:DI:DIStrych:DI8:contact"}
Contact          DI9S          "DI 9"          {channel="modbus:data:DI:DIStrych:DI9:contact"}
Contact          DI10S         "DI 10"         {channel="modbus:data:DI:DIStrych:DI10:contact"}
Contact          DI11S         "DI 11"         {channel="modbus:data:DI:DIStrych:DI11:contact"}
Contact          DI12S         "DI 12"         {channel="modbus:data:DI:DIStrych:DI12:contact"}
Contact          DI13S         "DI 13"         {channel="modbus:data:DI:DIStrych:DI13:contact"}
Contact          DI14S         "DI 14"         {channel="modbus:data:DI:DIStrych:DI14:contact"} 
Contact          DI15S         "DI 15"         {channel="modbus:data:DI:DIStrych:DI15:contact"}
Contact          DI16S         "DI 16"         {channel="modbus:data:DI:DIStrych:DI16:contact"}
 

 

Odczyt też nie ma szału bo nie widzi stanu wejść. 

Na konwerterze włączyłem nawet na test "Włącz obsługę wielu hostów" i nic nie zmieniło.

https://pl.aliexpress.com/item/1005003367166902.html?gatewayAdapt=glo2pol

 
Dodane : 08/09/2023 10:51 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Człowiek się trochę przespał i teraz tak sterowanie wyjściem rejestr od 1 do 16 a czytamy od 129.

Czyli próbujemy...

Bridge modbus:tcp:DIO "DIO Bridge" [ host="192.168.86.201", port=4196, id=7] {
    Bridge poller DIStrych "DIS" [ start=129, length=16, refresh=1000, type="holding" ] {
       Thing    data DI1   "DI1"        [ readStart="129", readValueType="int16", writeStart="129", writeValueType="int16",  writeType="holding" ]
       Thing    data DI2   "DI2"        [ readStart="130", readValueType="int16", writeStart="130", writeValueType="int16",  writeType="holding" ]
       Thing    data DI3   "DI3"        [ readStart="131", readValueType="int16", writeStart="131", writeValueType="int16",  writeType="holding" ]
       Thing    data DI4   "DI4"        [ readStart="132", readValueType="int16", writeStart="132", writeValueType="int16",  writeType="holding" ]
       Thing    data DI5   "DI5"        [ readStart="133", readValueType="int16", writeStart="133", writeValueType="int16",  writeType="holding" ]
       Thing    data DI6   "DI6"        [ readStart="134", readValueType="int16", writeStart="134", writeValueType="int16",  writeType="holding" ]
       Thing    data DI7   "DI7"        [ readStart="135", readValueType="int16", writeStart="135", writeValueType="int16",  writeType="holding" ]
       Thing    data DI8   "DI8"        [ readStart="136", readValueType="int16", writeStart="136", writeValueType="int16",  writeType="holding" ]
       Thing    data DI9   "DI9"        [ readStart="137", readValueType="int16", writeStart="137", writeValueType="int16",  writeType="holding" ]
       Thing    data DI10  "DI10"       [ readStart="138", readValueType="int16", writeStart="138", writeValueType="int16",  writeType="holding" ]
       Thing    data DI11  "DI11"       [ readStart="139", readValueType="int16", writeStart="139", writeValueType="int16",  writeType="holding" ]
       Thing    data DI12  "DI12"       [ readStart="140", readValueType="int16", writeStart="140", writeValueType="int16",  writeType="holding" ]
       Thing    data DI13  "DI13"       [ readStart="141", readValueType="int16", writeStart="141", writeValueType="int16",  writeType="holding" ]
       Thing    data DI14  "DI14"       [ readStart="142", readValueType="int16", writeStart="142", writeValueType="int16",  writeType="holding" ]
       Thing    data DI15  "DI15"       [ readStart="143", readValueType="int16", writeStart="143", writeValueType="int16",  writeType="holding" ]
       Thing    data DI16  "DI16"       [ readStart="144", readValueType="int16", writeStart="144", writeValueType="int16",  writeType="holding" ]
       }
    Bridge poller DOStrych "DOS" [ start=1, length=16, refresh=1000, type="holding" ] {
       Thing    data DO1   "DO1"        [ readStart="1", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="1", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO2   "DO2"        [ readStart="2", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="2", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO3   "DO3"        [ readStart="3", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="3", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO4   "DO4"        [ readStart="4", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="4", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO5   "DO5"        [ readStart="5", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="5", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO6   "DO6"        [ readStart="6", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="6", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ] 
       Thing    data DO7   "DO7"        [ readStart="7", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="7", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO8   "DO8"        [ readStart="8", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="8", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO9   "DO9"        [ readStart="9", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="9", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO10  "DO10"       [ readStart="10", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="10", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO11  "DO11"       [ readStart="11", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="11", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO12  "DO12"       [ readStart="12", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="12", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO13  "DO13"       [ readStart="13", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="13", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO14  "DO14"       [ readStart="14", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="14", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO15  "DO15"       [ readStart="15", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="15", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       Thing    data DO16  "DO16"       [ readStart="16", readValueType="int16", readTransform="JS(Read16relay.js)", writeStart="16", writeValueType="int16", writeTransform="JS(Write16relay.js)",  writeType="holding" ]
       }

}    

 

Switch          DO1S          "DO 1"          {channel="modbus:data:DIO:DOStrych:DO1:switch"}
Switch          DO2S          "DO 2"          {channel="modbus:data:DIO:DOStrych:DO2:switch"}
Switch          DO3S          "DO 3"          {channel="modbus:data:DIO:DOStrych:DO3:switch"}
Switch          DO4S          "DO 4"          {channel="modbus:data:DIO:DOStrych:DO4:switch"}
Switch          DO5S          "DO 5"          {channel="modbus:data:DIO:DOStrych:DO5:switch"} 
Switch          DO6S          "DO 6"          {channel="modbus:data:DIO:DOStrych:DO6:switch"}
Switch          DO7S          "DO 7"          {channel="modbus:data:DIO:DOStrych:DO7:switch"}
Switch          DO8S          "DO 8"          {channel="modbus:data:DIO:DOStrych:DO8:switch"}
Switch          DO9S          "DO 9"          {channel="modbus:data:DIO:DOStrych:DO9:switch"}
Switch          DO10S         "DO 10"         {channel="modbus:data:DIO:DOStrych:DO10:switch"}
Switch          DO11S         "DO 11"         {channel="modbus:data:DIO:DOStrych:DO11:switch"}
Switch          DO12S         "DO 12"         {channel="modbus:data:DIO:DOStrych:DO12:switch"}
Switch          DO13S         "DO 13"         {channel="modbus:data:DIO:DOStrych:DO13:switch"}
Switch          DO14S         "DO 14"         {channel="modbus:data:DIO:DOStrych:DO14:switch"} 
Switch          DO15S         "DO 15"         {channel="modbus:data:DIO:DOStrych:DO15:switch"}
Switch          DO16S         "DO 16"         {channel="modbus:data:DIO:DOStrych:DO16:switch"}
 

Contact          DI1S          "DI 1"          {channel="modbus:data:DIO:DIStrych:DI1:contact"}
Contact          DI2S          "DI 2"          {channel="modbus:data:DIO:DIStrych:DI2:contact"}
Contact          DI3S          "DI 3"          {channel="modbus:data:DIO:DIStrych:DI3:contact"}
Contact          DI4S          "DI 4"          {channel="modbus:data:DIO:DIStrych:DI4:contact"}
Contact          DI5S          "DI 5"          {channel="modbus:data:DIO:DIStrych:DI5:contact"} 
Contact          DI6S          "DI 6"          {channel="modbus:data:DIO:DIStrych:DI6:contact"}
Contact          DI7S          "DI 7"          {channel="modbus:data:DIO:DIStrych:DI7:contact"}
Contact          DI8S          "DI 8"          {channel="modbus:data:DIO:DIStrych:DI8:contact"}
Contact          DI9S          "DI 9"          {channel="modbus:data:DIO:DIStrych:DI9:contact"}
Contact          DI10S         "DI 10"         {channel="modbus:data:DIO:DIStrych:DI10:contact"}
Contact          DI11S         "DI 11"         {channel="modbus:data:DIO:DIStrych:DI11:contact"}
Contact          DI12S         "DI 12"         {channel="modbus:data:DIO:DIStrych:DI12:contact"}
Contact          DI13S         "DI 13"         {channel="modbus:data:DIO:DIStrych:DI13:contact"}
Contact          DI14S         "DI 14"         {channel="modbus:data:DIO:DIStrych:DI14:contact"} 
Contact          DI15S         "DI 15"         {channel="modbus:data:DIO:DIStrych:DI15:contact"}
Contact          DI16S         "DI 16"         {channel="modbus:data:DIO:DIStrych:DI16:contact"}
 

I pozostaje tylko jakiś "konflikt" na magistrali.

Komunikuje się tylko z urządzeniem o niższym ID

 
Dodane : 09/09/2023 7:29 am
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Po dłuższym sprawdzaniu okazuje się że nie ma znaczenie ID. Konwerter ( https://www.waveshare.com/rs485-to-eth-b.htm ) nie powinien stanowić problemu. Komunikuje się przez niego tylko z modułem przekaźnikowym (ID3) teraz dodałem 2 moduł (ID7). Nie ważne czy 2 moduł ma ID wyższe czy niższe od pierwszego i tak pierwszy przestaje się komunikować, a zaczyna 2. Komunikacja z 2 modułem odczyt 16 wejść działa poprawnie oraz sterowanie 16 wyjściami z drobnym lagiem też ok. Błąd polega na:

Konwerter:

Status OK

Most:

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

PK1:

BRIDGE_OFFLINE
No online bridge

Log:

 Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=3, functionCode=READ_MULTIPLE_REGISTERS, start=1, 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 3928683b-92f4-438a-bb88-ef0c8173c6c7]

 

Rezystory terminujące przy każdym urządzeniu nic nie dają, spięcie GND miedzy modułami też nic.

Czy jest jakaś dziwna ewentualność że przez konwerter mogę gadać tylko z jednym modułem?! Głupie by to było.

 
Dodane : 09/09/2023 1:21 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

Dziwna sprawa. Nie spotkałem się z podobną sytuacją. Ma ktoś pomysł?

 
Dodane : 13/09/2023 12:00 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 Pokaż definicje obu mostów TCP, nie musisz wrzucać wszystkich linijek Thing.

 
Dodane : 17/09/2023 2:27 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

@kamikac 

Bridge modbus:tcp:Przekazniki "Przekaźniki Bridge" [ host="192.168.86.201", port=4196, id=3] {
    Bridge poller PkStrych "PKS" [ start=1, length=16, refresh=500, type="holding" ]

Bridge modbus:tcp:DIO "DIO Bridge" [ host="192.168.86.201", port=4196, id=7] {
    Bridge poller DIStrych "DIS" [ start=129, length=16, refresh=1100, type="holding" ]

Nie neguję ale osobno mosty działają....

 
Dodane : 17/09/2023 3:59 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 A masz tak skonfigurowane jak w tym przykładzie?

Jak to wygląda w przypadku próby komunikacji z urzadzeniami za pośrednictwem konwertera z innego softu niż OH?

Czy magistrala jest podłączona jak w przykładzie?

Jaka wersję OH masz zainstalowaną?

 
Dodane : 17/09/2023 6:28 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

@kamikac 

Yyy zestresowałes mnie 😱🫣

Wklejone prosto z pliku. 

Patrzę i nie widzę problemu.

Oddzielnie działają razem nie konfliktu nie widzę czas też był taki sam i nic nie zmieniło....

Dobrze że paznokci nie mam bo bym już obrgryzal z nerwów przy lokciach 

 
Dodane : 17/09/2023 6:34 pm
(@kamikac)
Wpisów: 226
Pomocny
 

@szpila86 Ja w pliku też nie widze błędów, ale jak tak czytam dokumentacje w tym miejscu to się zastanawiam, czy nie powinno być

Bridge modbus:tcp:Przekazniki "Przekaźniki Bridge" [ host="192.168.86.201", port=4196, id=3, rtuEncoded=true] {
    Bridge poller PkStrych "PKS" [ start=1, length=16, refresh=500, type="holding" ]

bo mamy tu przejściówke z MODBUS TCP <-> MODBUS RTU.

Zresztą w przykładzie z poprzedniego posta podawali, że zmieniając tryb przejściówki na MODBUS TCP Protocol port automatycznie zmienia się na 502, a Ty masz inny.

 
Dodane : 17/09/2023 6:46 pm
(@szpila86)
Wpisów: 335
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

@kamikac 

A masz tak skonfigurowane jak w tym przykładzie? -> przesyłam w załączniku

Jak to wygląda w przypadku próby komunikacji z urzadzeniami za pośrednictwem konwertera z innego softu niż OH? -> indywidualnie testowałem razem podłączonych albo nie pamiętam albo nie

Czy magistrala jest podłączona jak w przykładzie? -> Tak ale połączenie tu jest pomijalne, za krótkie odcinki magistrali nawet terminatory nie powinny być potrzebne.

Jaka wersję OH masz zainstalowaną? -> 3.2.0.1

konw
 
Dodane : 17/09/2023 7:05 pm
Strona 2 / 3
Udostępnij: