Sida 1 av 2

Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 11:14:57
av FormerMazda
Söker nåt som låter mig ansluta en del energimätare via ett par olika seriella gränssnitt till en PC, och sen att PCn i sig blir en slav att läsa från.

Svårt att beskriva på annat vis, men det kanske är tydligt nog eller ger sig med trådens utveckling.

Helst gratis såklart! :D

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 12:12:52
av TomasL
Gratis får du svårt att hitta.

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 12:40:28
av pi314
Kan libmodbus vara en start?
The most popular Open Source library to communicate with Modbus devices.
• RTU (serial) and TCP (Ethernet) support
• available for Linux (packaged), FreeBSD, Mac OS and Windows
• written in C
• great test coverage and documentation
• security audits
• no dependencies
/Pi

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 13:52:14
av FormerMazda
Gratis är alltid svårt, men går det så är det bättre för plånboken såklart.
Men skulle en licens vara <500kr så är det kanske inget att orda om, dock brukar det ju vara gratis, eller ett mindre lands BNP för en licens..

Libmodbus låter ganska bra i en första anblick!
Men på 2min skumning av sidan så är jag nog inte med på vad exakt det är, av namnet att döma och "written in C" så antar jag att det ett lib jag använda till egen kod, typ om jag skriver nåt i VB.Net eller liknande?

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 13:56:14
av pi314
pi314 skrev: 7 augusti 2023, 12:40:28 Kan libmodbus vara en start?
The most popular Open Source library to communicate with Modbus devices.
• RTU (serial) and TCP (Ethernet) support
• available for Linux (packaged), FreeBSD, Mac OS and Windows
• written in C
• great test coverage and documentation
• security audits
• no dependencies
/Pi
Edit: Jag glömde länkarna innan...
https://libmodbus.org

Github:
https://github.com/stephane/libmodbus

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 13:57:44
av Icecap
Jag gjorde ett system som läste en MODBUS via RS485. Det var ganska enkelt då det bara var seriell kommunikation.

Att läsa data lite varstans ifrån o samla i en central enhet är inget problem.

At göra en t.ex. seriell länk för att andra kan hämta de värden via MODBUS protokoll är enkelt.

Jag använde ingen lib eller annat färdigt.

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 14:08:25
av pi314
Jag spanade in Modbus för ett drygt halvår sedan när jag insåg att jag troligen behöver det för ett projekt en bit ner på projektlistan.

Jag uppfattar det som ett bibliotek med funktioner för att kommunicera med något som har Modbus. Seriellt eller via TCP/IP.

FormerMazda: Det är ju inte helt uppenbart vad det är som du vill göra.

Här finns 15 exempel.
https://github.com/topics/libmodbus

Ett av exemplen är detta.
Modbus Client C Program with libmodbus-3.0.6 for Energy Meters
https://github.com/asura22nov/modbus-testing

/Pi

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 14:55:53
av FormerMazda
Jag beskrev inte supertydligt, men i sin grund är inte mycket att beskriva.

Men mer exakt är det 3st elmätare av ett fabrikat, i en RS485-slinga med unika IDn.
I en annan slinga sitter två andra mätare, också med unika IDn förstås.
Två slingor för det är olika kommunikationshastigheter och paritet och så.

Alla dessa mätare vill jag läsa värden ur, och göra dom tillgängliga för läsning på en tredje seriell port.

PCn har jag, gränssnitten löser sig, det är mjukvaran då.
Kommer ju behöva konfas för att läsa på en knippe register från olika IDn på slingorna.

Sen som sagt så får man sätta upp en knippe register som håller alla värden för läsning från PCn.

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 15:01:27
av sodjan
En enkel PLC som sköter Modbus trafiken och sedan gör data tillgängligt (kan vara annan gränssnitt/protokoll än Modbus).

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 15:05:26
av FormerMazda
Faktum är att det är en PLC som ska få mätvärdena i slutänden, men då jag inte är så vass på att sätta upp modbuskommunikation i den tänkte jag försöka åtminstone bara behöva läsa över ett gränssnitt med den.
Och dessutom läsa data formaterad som jag själv satt upp på register jag vet om.

Men, det kommer kanske inte förenkla massor i vilket fall. Annat än att loggning av mätarställning kan ju bli enklare via PCn mot via PLCn.

Re: Mjukvara till PC, modbus master och slav

Postat: 7 augusti 2023, 15:59:03
av H.O
Om det finns något färdigt som gör det du vill vet jag inte men jag använder Python med PyModbus för att läsa ett antal (7 tror jag det är) slavar via MODBUS RTU samt göra en del av denna data tillgänglig via MODBUS TCP. PyModbus kan alltså vara båda server och klient.

Re: Mjukvara till PC, modbus master och slav

Postat: 8 augusti 2023, 08:07:58
av FormerMazda
Verkar som att det är som jag trodde, man får kompilera ihop sitt egna program för detta.
Inte helt säker på att jag är så sugen på det, men jag kanske tänker för mycket på framtidskompatibilitet.

Jag tror väl jag löser programmeringen, men det är ju en tröskel att sätta upp miljön och komma igång.

Nåväl, terrängen är sonderad, bara att väga för och nackdelar och ta beslut på det. :)

Re: Mjukvara till PC, modbus master och slav

Postat: 8 augusti 2023, 13:50:28
av H.O
Jag måste rätta mig själv lite...
Jag använder (tydligen) minimalmodbus som RTU-klient och pyModbusTCP (inte att förväxla med pyModbus....) som TCP-server. I mitt fall så tillkom TCP-servern senare i ett tillstånd av featurecreep :-)

Hur som helst, med de två Python-biblioteken så kan det i sin enklaste form se ut så här.
Här läses två värden från en Carlo Gavazzi EM111 via MODBUS RTU och görs tillgängliga i register 0 respektive 1 på MODBUS TCP servern. För test körde jag HMI Droid för att läsa och presentera värdena från TCP-servern:

Kod: Markera allt

from time import sleep
import minimalmodbus
from pyModbusTCP.server import ModbusServer, DataBank

# Create the RTU connection for the EM111
meter = minimalmodbus.Instrument('COM1', 1)   # Meter connected at COM1 and has save address 1
meter.serial.baudrate = 9600
meter.serial.timeout = 0.5

# Create the MODBUS TCP server
server = ModbusServer("192.168.10.198", 5003, no_block=True)

try:
    server.start()
    print("MODBUS TCP Server started")
    
except:
    server.stop()
    print("Could not start MODBUS TCP Server")


while True:
    try:
      Frequency = meter.read_register(0x000F, 0, 3, False)
      Voltage = meter.read_register(0x0000, 0, 3, False)
      print("F:", Frequency/10, " V:", Voltage/10)

      DataBank.set_words(0,[Voltage])
      DataBank.set_words(1,[Frequency])
   
    except IOError:
        print("Failed to read from meter")

    except ValueError:
        print("Value error")

    except TypeError:
        print("Type Error")
   
    except KeyboardInterrupt:
      print("Abort, stopping server")
      server.stop()
      raise

    except:
        print("Something else went wrong")

    sleep(1.0)
Skärmklipp.PNG

Re: Mjukvara till PC, modbus master och slav

Postat: 8 augusti 2023, 13:55:18
av FormerMazda
Såg ju onekligen enkelt ut!
Ska nog kika lite på det ändå kanske..

Re: Mjukvara till PC, modbus master och slav

Postat: 8 augusti 2023, 15:09:16
av AndLi
FormerMazda skrev: 8 augusti 2023, 08:07:58 Verkar som att det är som jag trodde, man får kompilera ihop sitt egna program för detta.
Inte helt säker på att jag är så sugen på det, men jag kanske tänker för mycket på framtidskompatibilitet.

Jag tror väl jag löser programmeringen, men det är ju en tröskel att sätta upp miljön och komma igång.

Nåväl, terrängen är sonderad, bara att väga för och nackdelar och ta beslut på det. :)
Jag är ganska säker på att jag använt ett modbus lib till pyton för lite tester... då behöver du ju inte kompilera :)

Körde även libmodbus för ett c program, finns med Ubuntu så makefilen blev inte alls komplicerad!

Sen är ju inte modbus protokollet för serieport överdrivet komplicerat, så man kan ju enkelt slänga ihop de funktioner man behöver..