Mjukvara till PC, modbus master och slav

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
janno
Inlägg: 405
Blev medlem: 11 oktober 2009, 07:34:45
Ort: Västerås

Re: Mjukvara till PC, modbus master och slav

Inlägg av janno »

Installera home assistant så kanske du kan göra det du vill utan programmering. Jag läser och kan styra min Inverter till Solcellsanläggningen via Modbus TCP.
https://www.home-assistant.io/integrations/modbus/
Behöver du få data från seriell modbus kan du programmera upp nån ESP32 eller Rasperberry Pico med EspHome https://esphome.io/
Vilken energimätare vill du läsa från?
Finns flera färdiga configurationer för olika energimätare:
https://esphome.io/components/sensor/sdm_meter
https://esphome.io/components/sensor/selec_meter
eller en ren Modbus controller
https://esphome.io/components/output/modbus_controller
bara lite förslag.

/J
nifelheim
Den första
Inlägg: 2329
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Mjukvara till PC, modbus master och slav

Inlägg av nifelheim »

Jag tror att jag gör ungefär det du vill :)

Använder mbpoll som hanterar både Modbus RTU och TCP

Här läser jag en lokalt, USB-RS485, ansluten elmätare , start adress 15 och totalt 4 register.
Bara en fas ansluten :-)

Kod: Markera allt

jm@nuc11:~$ sudo mbpoll -t4:float /dev/ttyUSB0 -r 15 -c 4 -a1 -B -b 9600 -1
mbpoll 1.0-0 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.

Protocol configuration: Modbus RTU
Slave configuration...: address = [1]
                        start reference = 15, count = 4
Communication.........: /dev/ttyUSB0,       9600-8E1 
                        t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit float (big endian), output (holding) register table

-- Polling slave 1...
[15]: 	227.1
[17]: 	0
[19]: 	0
[21]: 	50.02

jm@nuc11:~$ 



Jag gjorde jag ett litet script, som cron kör åt mig,
där jag läser effekt och mätarställning och stoppar i en SQL databas.
en likadan mätare fast remote.
Formateringen kan optimeras :D

Bara ungefär 10 rader:

Kod: Markera allt


 #!/bin/bash
ip=$(dig +short min.mätardomän.se)
power=`mbpoll -m tcp -t4:float -r 29 -c 1  -1 $ip -p 49999 -B | tail -n 2`
meter=`mbpoll -m tcp -t4:float -r 265 -c 1  -1 $ip -p 49999 -B | tail -n 2`
dt=`date +'%Y-%m-%d %H:%M:%S'`
power=${power##* }
meter=${meter##* }

mysql -u user -ppassword -h 192.168.0.99 -P3306 <<EOF
USE test
INSERT INTO tabell (dt,power,meter)
VALUES ("$dt",$power,$meter)
EOF



Med data i databasen är man bara några klick bort från att göra vad som helst :)
FormerMazda
Inlägg: 6085
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Mjukvara till PC, modbus master och slav

Inlägg av FormerMazda »

Home assistant var jag ju nära på att kolla på innan i annat ärende, och nu dyker det upp igen. :)
Så snart kanske jag måste kolla på det på allvar.

Men det är ju också flera som gjort det jag tänker med vad det verkar rätt enkla script, så jag är lite villrådig..
Alternativen börjar bli många, men det finns ju några förutsättningar också, jag har förvisso inte viktat dom än.

* Framtidssäkert, inget som inte slutar funkar med nån update av operativ eller liknande
* Vill inte göra en one-off som jag måste lära om, OM jag vill ändra nåt i framtiden
* Inte för hög tröskel för att komma igång
* Nyttja befintligt för att inte bygga en julgran kanske ändrar på ovan kriterie

* De scriptade alternativen ser ju faktiskt väldigt enkla ut, det är väl bara en tröskel att få upp miljön att scripta i.
* Home assitant verkar kunna ha sin plats, men var sist jag kollade inte utan jobb att få igång
* I tänkt PLC kan jag göra detta, men modbus hanteras dåligt av den (kommunikation och läsning/skrivning bara via struct)
* Kommer sannolikt köra Citect SCADA, men det är inte säkert än. Där kan jag utan problem göra det annars.
grottan
Inlägg: 430
Blev medlem: 16 maj 2010, 12:16:42

Re: Mjukvara till PC, modbus master och slav

Inlägg av grottan »

Du har inte funderat på att köra Modbus TCP från SCADA eller PLC och använda en konverter mot Modbus RTU då du slipper sitta där med ”lifetime support” på din konvertering?

Både Moxa och Anybus har färdiga konverters, hsr inte provat själv men Anybus brukar sitta i var och varannat styrskåp där det förekommer energimätare anslutna med MBUS

https://www.moxa.com/en/products/indust ... 480-series

https://www.anybus.com/products/gateway ... cp-gateway
Användarvisningsbild
swapper
Inlägg: 1075
Blev medlem: 14 augusti 2012, 23:18:15
Ort: Helsingborg

Re: Mjukvara till PC, modbus master och slav

Inlägg av swapper »

Kanske om någon redan nämnt det men mbusdlinux mjukvara är grym för en "diy" modbus RTU <> IP gw
Kör detta mot en Carlogavazzi elmätare (3fas) i fasadskåpet <> Homeassistant via modbus.

Körst på en RPI med konverter liknande denna:
https://www.amazon.se/WINGONEER-CH340E- ... 8337&psc=1

Kanske inte 100 relevant för denna tråden men min Homeassistant konfig för att läsa Mätaren:

Kod: Markera allt

  - name: EM340
    type: tcp
    #timeout: 20
    #message_wait_milliseconds: 30
    #retries: 6
    #retry_on_empty: true
    host: 192.168.1.131
    port: 502
    sensors:
      - name: EM340_v_l_n_sys
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 36
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_v_l_l_sys
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 38
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_W_syst
        unit_of_measurement: W
        state_class: measurement
        device_class: power
        slave: 1
        address: 40
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 15
        lazy_error_count: 999
        swap: word

      - name: EM340_kwh_pos_tot
        unit_of_measurement: kWh
        state_class: total_increasing
        device_class: energy
        slave: 1
        address: 52
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kvarh_pos_tot
        unit_of_measurement: kvarh
        state_class: measurement
        device_class: energy
        slave: 1
        address: 54
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kwh_neg_tot
        unit_of_measurement: kWh
        state_class: total_increasing
        device_class: energy
        slave: 1
        address: 78
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kvarh_neg_tot
        unit_of_measurement: kvarh
        state_class: measurement
        device_class: energy
        slave: 1
        address: 80
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

        #L1
      - name: EM340_v_l1_l2
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 6
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_v_l1_n
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 0
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_a_l1
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        slave: 1
        address: 12
        data_type: int32
        input_type: input
        precision: 3
        count: 2
        scale: 0.001
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_w_l1
        unit_of_measurement: W
        state_class: measurement
        device_class: power
        slave: 1
        address: 18
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_va_l1
        unit_of_measurement: VA
        state_class: measurement
        device_class: APPARENT_POWER
        slave: 1
        address: 24
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_var_l1
        unit_of_measurement: var
        state_class: measurement
        device_class: energy
        slave: 1
        address: 30
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kwh_l1
        unit_of_measurement: kwh
        state_class: total_increasing
        device_class: energy
        slave: 1
        address: 64
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_pf_l1
        unit_of_measurement: PF
        state_class: measurement
        device_class: energy
        slave: 1
        address: 46
        data_type: int16
        input_type: input
        precision: 3
        count: 1
        scale: 0.001
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      #L2

      - name: EM340_v_l2_l3
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 8
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_v_l2_n
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 2
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_a_l2
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        slave: 1
        address: 14
        data_type: int32
        input_type: input
        precision: 3
        count: 2
        scale: 0.001
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_w_l2
        unit_of_measurement: W
        state_class: measurement
        device_class: power
        slave: 1
        address: 20
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_va_l2
        unit_of_measurement: VA
        state_class: measurement
        device_class: APPARENT_POWER
        slave: 1
        address: 26
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_var_l2
        unit_of_measurement: var
        state_class: measurement
        device_class: energy
        slave: 1
        address: 32
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kwh_l2
        unit_of_measurement: kwh
        state_class: total_increasing
        device_class: energy
        slave: 1
        address: 66
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_pf_l2
        unit_of_measurement: PF
        state_class: measurement
        device_class: energy
        slave: 1
        address: 47
        data_type: int16
        input_type: input
        precision: 3
        count: 1
        scale: 0.001
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      #L3

      - name: EM340_v_l3_l1
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 10
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_v_l3_n
        unit_of_measurement: V
        state_class: measurement
        device_class: voltage
        slave: 1
        address: 4
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_a_l3
        unit_of_measurement: A
        state_class: measurement
        device_class: current
        slave: 1
        address: 16
        data_type: int32
        input_type: input
        precision: 3
        count: 2
        scale: 0.001
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_w_l3
        unit_of_measurement: W
        state_class: measurement
        device_class: power
        slave: 1
        address: 22
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 30
        lazy_error_count: 999
        swap: word

      - name: EM340_va_l3
        unit_of_measurement: VA
        state_class: measurement
        device_class: APPARENT_POWER
        slave: 1
        address: 28
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_var_l3
        unit_of_measurement: var
        state_class: measurement
        device_class: energy
        slave: 1
        address: 34
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_kwh_l3
        unit_of_measurement: kwh
        state_class: total_increasing
        device_class: energy
        slave: 1
        address: 68
        data_type: int32
        input_type: input
        precision: 2
        count: 2
        scale: 0.1
        scan_interval: 60
        lazy_error_count: 999
        swap: word

      - name: EM340_pf_l3
        unit_of_measurement: PF
        state_class: measurement
        device_class: energy
        slave: 1
        address: 48
        data_type: int16
        input_type: input
        precision: 3
        count: 1
        scale: 0.001
        scan_interval: 60
        lazy_error_count: 999
        swap: word
Skriv svar