Parameters aflezen Growatt omvormer

Ik heb een omvormer van het merk Growatt, het model is MAX 50-80KTL3 LV. Datasheet in bijlage.

Korte versie van het probleem:

Ik probeer via ModBus een aantal parameters af te lezen. Hiervoor sluit ik het apparaat via zijn RS485 ingang aan op mijn laptop. Vervolgens open ik ModScan64. Tot nu toe is het me niet gelukt de parameters af te lezen: ik krijg in ModScan64 steeds de foutmelding "MODBUS message TIME-OUT".

Ik heb wat zitten troubleshooten en kom er niet uit. De foutmelding is zo algemeen dat er niet zomaar een specifieke oorzaak/oplossing bij te vinden is. Het enige wat ik kan bedenken is om alles na te lopen. Mijn vraag is nu of iemand mij op weg kan helpen.

Hier alvast wat toelichting over hoe ik de boel heb opgesteld:

-De aansluiting tussen de omvormer en mijn laptop vindt plaats met een RS485-kabel https://webshop.cedel.nl/RS-485-kabel-(Modbus)-Halogeenvrij, aangesloten op een modbus converter USB-RS485 https://webshop.cedel.nl/Modbus-converter.

-Met zijn ene uiteinde zit de kabel aangesloten op de RS485 ingang van het PCB van de omvormer. Eén draad zit op A (niet goed zichtbaar in onderstaande bijlage), de andere op B en de GND-draad (dat losse metaal aan de buitenkant van de kabel als ik het goed begrijp) op GND. Via een USB-connector zit de RS485-kabel aangesloten op mijn laptop, COM-port 4. Deze USB connector heeft alleen een aansluiting voor + en -, niet voor GND.

-Ik open vervolgens ModScan64. Ik volg zo’n beetje deze tutorial https://www.youtube.com/watch?v=STBX1Nc2I0s en gebruik de parameters die ik vind in de handleiding (bijlage: "New-Modbus RS485 RTU Protocal Latest Ver"), namelijk:

->Baud rate 9600, word length 8, parity NONE, stop bits 1 (p8/85 bovenstaande handleiding);
->Modbus Point Type: Holding/input register (p9/85, p47/85);
->Device Id 1. Volgens de handleiding: Growatt MAX 50-80KTL3 LV MV User Manual (te groot om te uploaden, link: http://www.growatt.co.nl/show-42-588.html, dan onderaan de pagina op 'user manual' klikken en dan het document "Growatt MAX 50-80KTL3 LV MV User Manual") p23 is het default adres 1 (ik veronderstel dat dit hetzelfde is als ‘Device Id’ in de ModScan64 interface).

In de tutorial hierboven verschijnen op die manier de gegevens gewoon. Ik krijg dus de foutmelding “MODBUS message TIME-OUT” bij de twee registers waar informatie zou moeten staan en bij allebei de registers staat op alle adressen 0.

Hier zijn dingen die ik al geprobeerd heb:

-het kan dat de + en – omgedraaid zijn. Ik heb goed gekeken of dit klopte en heb ze bij de USB aansluiting een paar keer omgewisseld om te kijken wat er gebeurde;

-ik heb de spanning op de draden gemeten met een multimeter. Bij wisselspanning meet ik 0V, bij gelijkspanning ~1,1V;

-Bij een oscilloscoop zag ik ook dat er gewoon continu een gelijkspanning tussen de + en – van de kabel staat, iets boven de 1V. Ik heb op de x-as tijdsbereiken geprobeerd van enkele nanoseconden (ms 2e afbeelding onderstaand, maar hetzelfde beeld was te zien bij ns) tot enkele seconden , zodat ik niks zou missen. Bij de bovenste meting zie je de spanning van laag naar hoog naar laag gaan, omdat ik maar tijdelijk meette.

-Ik heb een andere USB-poort geprobeerd, COM-port 3. Ik weet dat ik in ModScan64 de juiste poort aangeef omdat, als ik bij het veld ‘Connect using’ de verkeerde kies, er een foutmelding verschijnt met ‘connection failed’.

-Ik heb wat verschillende waarden voor de parameters ‘address’ en ‘length’ geprobeerd in ModScan64. Bij length begon ik bij 1 en probeerde ik wat waarden tot 1000. Bij address begon ik bij 1 en heb ik verder wat aangemodderd.

Tot nu toe geen resultaat. Wie kan er hulp bieden?

Weet je zeker dat je kabel goed is?

Mijn Growatt heeft een db9 connector die met + en - 12 volt werkt. Als je een USB-serieel adapter gebruikt, die werken vaak met 5 en 0 volt.

Je hebt dan een aanpassing nodig omdat deze USB-serieel adapter met zijn maximaal +5 volt als digitaal nul gezien kan worden door de Growatt, die +12 verwacht. Ook de 0 volt die voor de USB-serieel adapter een digitale nul is kan door de Growatt verkeerd begrepen worden omdat die -12 verwacht.

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!
Sine

Moderator

Heb je er een converter tussen zitten?

RS232 is heel wat anders dan RS485

Bedankt voor de reacties. Ik heb contact opgenomen met de fabrikant, die mij vertelde dat het lezen van parameters van het apparaat via ModBus, wat ik wil doen, via de RS485 aansluiting op de omvormer gaat. Het bericht is als volgt:

"Het is mogelijk om de MAX omvormers via Modbus uit te lezen. Dit kan enkel bekabeld, via de RS485 aansluiting op de omvormers. Om meerdere omvormers te verbinden dienen deze een apart COM-adres te krijgen, deze kan ingesteld worden met de bijgeleverde USB/Wifi debuggingtool icm de Shinephone app.

In de bijlage vindt u 2 documenten met meer informatie over het gebruik van he Modbus protocol. Houd er wel rekening mee dat het instellien van het Modbus protocol eigen verantwoordelijkheid is, omdat deze wordt gebruikt met software van derden kunnen wij hier geen/beperkte ondersteuning voor bieden."

Kan het dat dit incorrect is? Ik heb de RS485 kabel wel via een USB-connector verbonden met mijn laptop. Bij de omvormer zit hij verbonden met een schroefconnector.

Welke USB-485 module heb je? Heb je hem goed aangesloten?

Het lijkt me stug dat de fabrikant "we hebben modbus via RS485" in de handleiding zet terwijldat niet zo is. Dan vallen ze prompt door de mand.

Kan het dat dit incorrect is?

Het lijkt me stug dat de fabrikant loopt te liegen.

Dat een random hollander die voor het eerst z'n growatt via voor hem nieuwe technieken probeert aan te sluiten ergens een foutje maakt is VEEEL waarschijnlijker.

Je beweert "ik heb het goed ingesteld" maar presenteert geen enkele manier waarop wij dat zouden kunnen verifieren.

Je beweert "ik heb het goed aangesloten" maar ... (you know the drill).

Jij doet hoogst waarschijnlijk iets verkeerd. Maar het is lastig om specifieker te zijn totdat jij de benodigde info aanlevert.

Screenshot van de instellingen, Foto van de adapter, Merk van de adapter, foto van de aansluitingen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Net even gekeken naar mijn poortsettings die zijn: 9K6 8N1

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Staat dat USB ding wel op RS485?

Ik meen me te herinneren dat ik bij bv programmeerkabels van Epever expliciet RS485 moest opgeven onder apparaatbeheer ergens voordat die kabel wou communiceren.

Ohhh. Die snap ik: 1 van de modem-control output signalen wordt als "driver enable" gebruikt. Dat is gebruikelijk. Dus als je dat vanuit de software niet als zodanig aanstuurt, dan zal ie wel op ofwel zenden ofwel alleen ontvangen blijven staan. In beide gevallen krijg je niets terug als je een request stuurt. :-)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Bij mijn beste weten is modbus een (software) protocol. Op m'n Orange Pi onder Linux vereist het i.i.g. een aparte Python-driver anex libary voor er bruikbare data uitkomt. De enige hardware aanpassing is een 'true'RS232 aanpassing omdat de serieel aansluiting daar ook een 5 volt is i.p.v. plus en min 12 volt. Had ik eerst een speciaal chipje voor maar die gingen erg snel stuk. Dus nu TTL converter met twee transistors.

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Maar wat heeft rs232 hiermee te maken? Modbus is rs485.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Op 4 augustus 2022 02:05:34 schreef harry64:
De enige hardware aanpassing is een 'true'RS232 aanpassing omdat de serieel aansluiting daar ook een 5 volt is i.p.v. plus en min 12 volt. Had ik eerst een speciaal chipje voor maar die gingen erg snel stuk. Dus nu TTL converter met twee transistors.

[bijlage]

als die chip er snel aan ging, dan deed je wat fout.
maar RS232 is geen RS485, zoals anderen al schreven. de data kan wel dezelfde zijn, maar de hardware niet. RS485 gaat over 4 draden, differentieel. Zoek anders eens op RS232 naar RS422 driver. blijkbaar heb je al een RS232 seriële poort. (volgens je tekening)

Op 3 augustus 2022 14:19:00 schreef rew:
Welke USB-485 module heb je? Heb je hem goed aangesloten?

Het lijkt me stug dat de fabrikant "we hebben modbus via RS485" in de handleiding zet terwijldat niet zo is. Dan vallen ze prompt door de mand.

[...]
Het lijkt me stug dat de fabrikant loopt te liegen.

Dat een random hollander die voor het eerst z'n growatt via voor hem nieuwe technieken probeert aan te sluiten ergens een foutje maakt is VEEEL waarschijnlijker.

Je beweert "ik heb het goed ingesteld" maar presenteert geen enkele manier waarop wij dat zouden kunnen verifieren.

Je beweert "ik heb het goed aangesloten" maar ... (you know the drill).

Jij doet hoogst waarschijnlijk iets verkeerd. Maar het is lastig om specifieker te zijn totdat jij de benodigde info aanlevert.

Screenshot van de instellingen, Foto van de adapter, Merk van de adapter, foto van de aansluitingen.

Goed punt. Ik ga deze post opnieuw maken, maar aangevuld met meer informatie.

KGE

Golden Member

Op 4 augustus 2022 06:35:16 schreef kris van damme:
[...]
als die chip er snel aan ging, dan deed je wat fout.
maar RS232 is geen RS485, zoals anderen al schreven. de data kan wel dezelfde zijn, maar de hardware niet. RS485 gaat over 4 draden, differentieel. Zoek anders eens op RS232 naar RS422 driver. blijkbaar heb je al een RS232 seriële poort. (volgens je tekening)

RS485 (en zeker ModBus) gaat meestal over twee draden, half duplex. Dit omdat je dan meerdere apparaten parallel aan de bus kan hangen.

Dit is vooral bij solar inverters erg handig omdat je ze dan gewoon door kan lussen van apparaat naar apparaat. Het laatste apparaat heeft dan een busafsluiting nodig (terminator) van 120 ohm.

De identificatie stel je in op de inverter en de software kan ze dan stuk voor stuk afvragen.

Let op: de meeste solar inverters met RS485 spreken hun eigen protocol en geven geen kik zonder eerst netjes (lees met een gedefineerd protocol) gevraagd te worden.

In het verleden heb ik geprobeer uit een Delta Solar inverter data te lezen maar zonder het juiste protocol (strak gedefineerde frames met bijbehorende checksum) komt er helemaal niets uit.

De PC moet ook een geschikte RS485 adapter hebben, eentje die zelf overschakeld van receive naar transmit zodra er data vanuit de PC gestuurd wordt. Met een prachtige volledige geisoleerde RS232 naar RS485 adapter kreeg ik dit niet voor elkaar.

Een goedkope USB naar RS485 werkte echter prima..

vergeten

Golden Member

Op 4 augustus 2022 07:48:28 schreef P247:
[...]

Goed punt. Ik ga deze post opnieuw maken, maar aangevuld met meer informatie.

Opnieuw maken???? Een nieuw topic zelfde onderwerp?
Dat gaan de moderatoren niet goed vinden, plaats liever hier de aanvullende info, dan zit alles in een topic.

Doorgaans schrijf ik duidelijk wat ik bedoel, toch wordt het wel anders begrepen.

Op 4 augustus 2022 06:35:16 schreef kris van damme:
[...]
als die chip er snel aan ging, dan deed je wat fout.
maar RS232 is geen RS485, zoals anderen al schreven. de data kan wel dezelfde zijn, maar de hardware niet. RS485 gaat over 4 draden, differentieel. Zoek anders eens op RS232 naar RS422 driver. blijkbaar heb je al een RS232 seriële poort. (volgens je tekening)

Geen idee wat ik verkeerd zou hebben gedaan met de chip als deze tussen een week of twee en anders weer eens een dag heel bleven. Maar uiteindelijk gingen ze altijd stuk. De transistor TTL-converter werkt nu al drie jaar zonder enig probleem.

En het werkt met totaal drie draden: TX, RX, massa.

Mijn Growatt levert per aanvraag dan 1 lange reeks data aan die op positie gecodeerd is. Via het Python script wordt dan op de benodigde posities de diverse data er uit gevist. De Growatt levert o.a. PV-vermogen, NET-vermogen, inverter temperatuur, NET-frequentie, PV-voltage, NET-voltage, PV-ampére, NET-ampére en nog een reeks data over status van de inverter zoals error's en standby, online. Na zonsondergang levert de Growatt gewoon géén data meer en is onbereikbaar tot de volgende zonsopgang.

De mijne is 1 fase maar in de data zitten wel de posities voor al deze NET-data per fase, die zijn bij de mijne dan 000.

Ik kan deze data per seconde opvragen, maar mijn script doet dat per 10 seconde wat wordt bepaald door de smartmeter die maar per 10 seconden een rapport geeft. Van deze data wordt per 5 minuten een gemiddelde gemaakt dat naar PVoutput wordt gestuurd.

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Harry, Jij hint dat jou growatt een RS232 verbinding heeft, TS zegt dat de zijne een RS485 verbinding heeft. Misschien hebben jullie alletwee gelijk. Misschien niet.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Op 4 augustus 2022 11:15:20 schreef rew:
Harry, Jij hint dat jou growatt een RS232 verbinding heeft, TS zegt dat de zijne een RS485 verbinding heeft. Misschien hebben jullie alletwee gelijk. Misschien niet.

Bij mijn beste weten loopt het modbus protocol over een RS232 verbinding. Op een standaard serieel monitor krijg ik i.d.d. niets voor elkaar en de Growatt levert de data pas na een aanvraag. Volgens de docu van mijn Growatt 2000 is het RS232 via een modbus protocol. De aansluiting zelf op de Growatt is een db9 p 2, 3, en 5 voor massa. Er zit bij mij geen RS485 aansluiting op.

Na een half jaar ploeteren op vooral de software, want dat is niet mijn sterkste kant, dit script wat via een timer elke 5 minuten opnieuw gestart wordt en PV, NET, Gas en water data e.d. naar PVoutput stuurt.

c code:


#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import serial
from pymodbus.client.sync import ModbusSerialClient as ModbusClient #voor modbusclient 
import subprocess # voor Curl
import urllib, json #voor weersite tempratuur

SYSTEMID="*****"
APIKEY="****************************************"

def dts():
	return format(time.strftime('%Y%m%d_%H%M%S'))

def output(data):
	t=0
	while t <len(data):
		print t,data[t],data[t+1],t+1
		t=t+2
# end output

def loggen(file, data):
	t_date = format(time.strftime('%Y%m%d'))
	fo = open('/pvoutput/log/'+t_date+'_'+file+'.log', "a")
	fo.write (str(data)+'\n');
	fo.close()
#end loggen

def inverter(l):
	value=[]
	client = ModbusClient(method='rtu', port='/dev/ttyS2', baudrate=9600, stopbits=1, parity='N', bytesize=8, timeout=2)
	try: 
		rr = client.read_input_registers(0,43)
		value = rr.registers
		sts = 'online'
#		loggen('inverter', value)
	except AttributeError:
		sts='offline'
		return 'dts',dts(), 'sts',sts


	if sts == 'online':
		chk=value[0]
		pvwa=float(value[1])/10
		pvwb=float(value[2])/10
		pvw=pvwa+pvwb
		pvv=float(value[3])/10
		pva=float(value[4])/10
		nwoa=float(value[11])/10
		nwob=float(value[12])/10
		nwo=nwoa+nwob
		nhz=float(value[13])/100
		nvo=float(value[14])/10
		whda=float(value[26])*100
		whdb=float(value[27])*100
		whd=whda+whdb
		whta=float(value[28])*100
		whtb=float(value[29])*100
		wht=whta+whtb
		itm=float(value[32])/10
		if chk==0:
			sts="standbye"
		return 'dts',dts(), 'sts',sts, 'pvw',pvw, 'pvv',pvv, 'pva',pva, 'nwo',nwo, 'nhz',nhz, 'nvo',nvo, 'whd',whd, 'wht',wht, 'chk',chk, 'itm',itm, 'pvwa',pvwa ,'pvwb',pvwb, 'nwoa',nwoa, 'nwob',nwob, 'whda',whda, 'whdb',whdb, 'whta',whta, 'whtb',whtb ,'loop',l
	else:
		pass
#end inverter

def smartmeter(l):
	#Set COM port
	ser = serial.Serial()
	ser.baudrate = 115200
	ser.bytesize=serial.EIGHTBITS
	ser.parity=serial.PARITY_NONE
	ser.stopbits=serial.STOPBITS_ONE
	ser.xonxoff=0
	ser.rtscts=0
	ser.timeout=20
	ser.port="/dev/ttyS1"
	#Open COM port
	try:
		ser.open()
		sts='online'
	except:
		sts='offline'
		return 'dts',dts(),'sts',sts

	if sts == 'online':
		# stack is list met 26 regels.
		stack_teller=0
		stack=[]
		while stack_teller < 26:
			#Read 1 line
			line = str(ser.readline())
			stack.append(line)
#			loggen('smartmeter', line)
			# Daltarief afgenomen vermogen
			if stack[stack_teller][0:9] == "1-0:1.8.1":
				wul = int(float(stack[stack_teller][10:20])*1000)

			# Piektarief afgenomen vermogen
			elif stack[stack_teller][0:9] == "1-0:1.8.2":
				wuh = int(float(stack[stack_teller][10:20])*1000)

			# Daltarief, teruggeleverd vermogen 1-0:2.8.1
			elif stack[stack_teller][0:9] == "1-0:2.8.1":
				wdl = int(float(stack[stack_teller][10:20])*1000)

			# Piek tarief, teruggeleverd vermogen 1-0:2.8.2
			elif stack[stack_teller][0:9] == "1-0:2.8.2":
				wdh = int(float(stack[stack_teller][10:20])*1000)

			# Huidige stroomafname: 1-0:1.7.0
			elif stack[stack_teller][0:9] == "1-0:1.7.0":
				pwu = int(float(stack[stack_teller][10:16])*1000)

			# Huidig teruggeleverd vermogen: 1-0:1.7.0
			elif stack[stack_teller][0:9] == "1-0:2.7.0":
				pwd = int(float(stack[stack_teller][10:16])*1000)

			# Gasmeter: 0-1:24.2.1
			elif stack[stack_teller][0:10] == "0-1:24.2.1":
				dm3 = int(float(stack[stack_teller][26:35])*1000)

			else:
				pass
			stack_teller = stack_teller +1
		ser.close()

		return 'dts',dts(),'sts',sts,'wul',wul,'wuh',wuh,'wdl',wdl,'wdh',wdh,'pwu',pwu, 'pwd',pwd, 'gas',dm3, 'loop',l
	else:
		return 'dts',dts(), 'sts',sts
# end smartmeter

def weather():
	try:
		key = "******************************"
		plaats = "**********"
		url = "http://api.openweathermap.org/data/2.5/weather?q=" + plaats + "&appid=" + key + "&units=metric"
		response = urllib.urlopen(url)
		data = json.loads(response.read())['main']['temp']
		return data
	except:
		data=[]
		return data
# end weather

# end subs


# collect 5 minutes data

g=0
gpwu=0
gpwd=0
gpvw=0
gpvv=0
gnwo=0
hpu=0

while g < 30:
	g=g+1
	net=smartmeter(g)
	if net[3] == 'online':
		gpwu=gpwu+net[13]
		gpwd=gpwd+net[15]
		loggen('net',net)
	zon=inverter(g)
	if zon[3] == 'online' or zon[3] == "standbye":
		gpvw=gpvw+zon[5]
		gpvv=gpvv+zon[7]
		gnwo=gnwo+zon[11]
		loggen('zon',zon)

opwu=0
opwd=0
opvw=0
opvv=0
onwo=0


opwu=int(gpwu/g)
opwd=int(gpwd/g)

opvw=int(gpvw/g)
opvv=round(gpvv/g,1)
onwo=int(gnwo/g)

hpu=(onwo-opwd)+opwu
gas=round(float(net[17])/1000, 3)
temp=weather()

t_date = format(time.strftime('%Y%m%d'))
t_time = format(time.strftime('%H:%M'))

f = open("/water/M3", "r")
wtr=(f.read())
f.close()


# upload net and zon
if net[3] == 'online' and zon[3] == "online":
	cmd=('curl -d "d=%s" -d "t=%s" -d "v1=%s" -d "v2=%s" -d "v3=%s" -d "v4=%s" -d "v5=%s" -d "v6=%s" -d "v7=%s" -d "v8=%s" -d "v9=%s" -d "v10=%s" -d "v11=%s" -d "v12=%s" -d "c1=1" -d n=0 -H \
	"X-Pvoutput-Apikey: %s" -H \
	"X-Pvoutput-SystemId: %s" \
	http://pvoutput.org/service/r2/addstatus.jsp'\
	%(t_date, t_time, zon[19], onwo, net[5]+net[7], opwu, temp, opvv, gas, wtr, hpu, opvw-onwo, zon[23], opwd,\
	APIKEY,SYSTEMID))
	ret = subprocess.call(cmd,shell=True)
# end upload net+zon

# upload net and zon standbye
elif net[3] == 'online' and zon[3] == "standbye":
	cmd=('curl -d "d=%s" -d "t=%s" -d "v1=%s" -d "v2=%s" -d "v3=%s" -d "v4=%s" -d "v5=%s" -d "v7=%s" -d "v8=%s" -d "v9=%s" -d "v10=%s" -d "c1=1" -d n=0 -H \
	"X-Pvoutput-Apikey: %s" -H \
	"X-Pvoutput-SystemId: %s" \
	http://pvoutput.org/service/r2/addstatus.jsp'\
	%(t_date, t_time, zon[19], onwo, net[5]+net[7], opwu, temp, gas, wtr, hpu, opvw-onwo,\
	APIKEY,SYSTEMID))
	ret = subprocess.call(cmd,shell=True)
# end upload net+zon

# upload net only
elif net[3] == 'online' and zon[3] == 'offline' or zon[3] == "standbye":
	cmd=('curl -d "d=%s" -d "t=%s" -d "v3=%s" -d "v4=%s" -d "v5=%s" -d "v7=%s" -d "v8=%s" -d "v9=%s" -d "c1=1" -d n=0 -H \
	"X-Pvoutput-Apikey: %s" -H \
	"X-Pvoutput-SystemId: %s" \
	http://pvoutput.org/service/r2/addstatus.jsp'\
	%(t_date, t_time, net[5]+net[7], opwu, temp, gas, wtr, hpu,\
	APIKEY,SYSTEMID))
	ret = subprocess.call(cmd,shell=True)
# end upload net

# upload zon only
elif net[3] == 'offline' and zon[3] == 'online':
	cmd=('curl -d "d=%s" -d "t=%s" -d "v1=%s" -d "v2=%s" -d "v5=%s" -d "v6=%s" -d "v8=%s" -d "c1=1" -d n=0 -H \
	"X-Pvoutput-Apikey: %s" -H \
	"X-Pvoutput-SystemId: %s" \
	http://pvoutput.org/service/r2/addstatus.jsp'\
	%(t_date, t_time, zon[19], onwo, temp, opvv, wtr,\
	APIKEY,SYSTEMID))
	ret = subprocess.call(cmd,shell=True)
# end upload zon
else:
	pass
# end
Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Op 4 augustus 2022 08:48:32 schreef KGE:
[...]

RS485 (en zeker ModBus) gaat meestal over twee draden, half duplex. Dit omdat je dan meerdere apparaten parallel aan de bus kan hangen.

Dit is vooral bij solar inverters erg handig omdat je ze dan gewoon door kan lussen van apparaat naar apparaat. Het laatste apparaat heeft dan een busafsluiting nodig (terminator) van 120 ohm.

De identificatie stel je in op de inverter en de software kan ze dan stuk voor stuk afvragen.

Let op: de meeste solar inverters met RS485 spreken hun eigen protocol en geven geen kik zonder eerst netjes (lees met een gedefineerd protocol) gevraagd te worden.

In het verleden heb ik geprobeer uit een Delta Solar inverter data te lezen maar zonder het juiste protocol (strak gedefineerde frames met bijbehorende checksum) komt er helemaal niets uit.

De PC moet ook een geschikte RS485 adapter hebben, eentje die zelf overschakeld van receive naar transmit zodra er data vanuit de PC gestuurd wordt. Met een prachtige volledige geisoleerde RS232 naar RS485 adapter kreeg ik dit niet voor elkaar.

Een goedkope USB naar RS485 werkte echter prima..

Zou je me meer kunnen vertellen over hoe je kan communiceren met de omvormer? De fabrikant heeft me een document gestuurd met een stukje code en allerlei commando's (zie bijlage), maar ik heb geen idee hoe je deze kan invoeren (via welk programma of wat dan ook).

Op 4 augustus 2022 15:01:40 schreef harry64:
[...]
Bij mijn beste weten loopt het modbus protocol over een RS232 verbinding. Op een standaard serieel monitor krijg ik i.d.d. niets voor elkaar en de Growatt levert de data pas na een aanvraag. Volgens de docu van mijn Growatt 2000 is het RS232 via een modbus protocol. De aansluiting zelf op de Growatt is een db9 p 2, 3, en 5 voor massa. Er zit bij mij geen RS485 aansluiting op.

Na een half jaar ploeteren op vooral de software, want dat is niet mijn sterkste kant, dit script wat via een timer elke 5 minuten opnieuw gestart wordt en PV, NET, Gas en water data e.d. naar PVoutput stuurt.

c code:


...

Kan je me uitleggen hoe je nu precies met de omvormer communiceert? Is het een kwestie van deze code in een IDE invoeren en het programma runnen, of is er een ander programma of iets dergelijks voor nodig? Ik heb namelijk een document van de fabrikant gekregen waarin allerlei commando's en ook een stukje code beschreven staan (bijlage), maar geen idee hoe of waar je ze nu invoert...

Na het openen van de poort met:

value=[]
client = ModbusClient(method='rtu', port='/dev/ttyS2', baudrate=9600, stopbits=1, parity='N', bytesize=8, timeout=2)
try:

Wordt het register opgevraagd met:

rr = client.read_input_registers(0,43)
value = rr.registers

Dit alles draait op een linux variant op een Orange Pi.

Ik moest i.i.g. de serial als ook de modbus lib instaleren in linux.

EDIT2: En het draait alleen onder de nieuwere versie van Python. Ik dacht ver. 3

Onder Windows had ik een ander programma. Waar toen al moeilijk aan te komen was. Ga ik even opzoeken wat dat was.

EDIT:
Dat was Shinebus. Die werkte alleen met de onboard seriele poort. Met de USB-TTL poorten werkte het niet.

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Op 4 augustus 2022 10:44:35 schreef harry64:
[...]
Geen idee wat ik verkeerd zou hebben gedaan met de chip als deze tussen een week of twee en anders weer eens een dag heel bleven. Maar uiteindelijk gingen ze altijd stuk. De transistor TTL-converter werkt nu al drie jaar zonder enig probleem.

had die chip enige protectie eromheen? Meestal sneuvelen ze bij het aansluiten van de externe device, door ontlading of het EMI filter in de laptopvoeding bvb. (heb er zo ook in rook zien opgaan :-) )

als je veel extern aan en loskoppeld moet je die dingen beschermen tegen de stoute omgeving. Als voorbeeld een stukje schema van RS422 naar 232 met bescherming door varistoren (maar het kan nog beter)

TIMEOUT wil zeggen dat het hele ding niet reageert, het is dus geen register adres of commando wat fout is maar de hele communicatie doet niets.

Heb je de RS485 lijnen aan weerskanten wel met 120 Ohm afgesloten?
Verder is modbus eigelijk per definitie Even parity, maar er wordt veel tegen gezondigd. Dus toch eens proberen 8E1 in te stellen.
Anders No parity instellen en 2 stopbits, die variant heb ik ook al eens gezien.

Probeer ook eens RTS control aan te zetten, dat signaal wordt gebruikt om de direction om te schakelen. En wat spelen met de delays. (Staan in de MODBUS specificaties wat het formeel moet zijn)

Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.

Op 4 augustus 2022 23:55:49 schreef kris van damme:
[...]

had die chip enige protectie eromheen? Meestal sneuvelen ze bij het aansluiten van de externe device, door ontlading of het EMI filter in de laptopvoeding bvb. (heb er zo ook in rook zien opgaan :-) )

als je veel extern aan en loskoppeld moet je die dingen beschermen tegen de stoute omgeving. Als voorbeeld een stukje schema van RS422 naar 232 met bescherming door varistoren (maar het kan nog beter)
[bijlage]

Die had ik i.d.d. er niet op zitten. Er hangt wel iets van 12 meter 4 aderig 'beldraad' aan. Dat was namelijk de enige die qua 4 aderig en dikte van zolder mee naar beneden kon naar de meterkast in het buisje van de CV thermostaat. :P

Ik vermoed dat de MAX chip last had van eventuele (statische) 'ontladingen' op de PV panelen. Het is in de trafo loze inverter wel net gescheiden via opto's denk ik, maar die panelen hangen ook via de inverter aan het net. Ik heb geen aarddraad van het frame zien binnen komen. De PV panelen mogen met de DC aansluiting i.i.g. niet geaard worden wegens dat.

De inverter meet wel of er een aardingslek optreed in de PV panelen, dan geeft hij een foutmelding en stopt met werken. Volgens de doc. Nog niet meegemaakt.

Enige wat het huidige systeem wel eens last van heeft is dat de buiten temperatuur die het script via internet opgehaald bij weeronline, regelmatig een dip van -1 geeft of dat de Orange Pi Zero geheel op een hoop loopt. Dan moet de voeding er even af. Ook dat gebeurd random. Gaat weken tot maanden goed en soms is het 3x in een week dat hij geheel vastloopt zonder duidelijke oorzaak.

Waar het moederbord het meeste rookt, loopt ook de meeste stroom!

Op 5 augustus 2022 01:02:57 schreef harry64:
Ik heb geen aarddraad van het frame zien binnen komen. De PV panelen mogen met de DC aansluiting i.i.g. niet geaard worden wegens dat.

Sinds 2017 MOETEN zonnepanelen geaard worden.

Hier staat dat het moet.
https://www.zonnepanelen.net/aarden-zonnepanelen/

en hier staat dat dit sinds 2017 geldt (maar niet in "zin 1" dat het moet).
https://123groepenkast.nl/Aansluiten-Aarden-PV-panelen

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/