Hjälp med rs-485, modbus
Re: Hjälp med rs-485, modbus
Jag kanske inte riktigt hänger med men jag kan inte låta bli att fundera på följande:
* När en RS485-enhet ska sända ska sändaren slås på. Innan dess är bussen "flytande" då alla enheter lyssnar.
* Tx ska slås på en kort stund innan det ska sändas.
* Om DC-nivån motsvarar en startbit innan Tx aktiveras kan detta ge en falsk startbit till en i övrig "tom" byte.
* Om DC-nivån sedan återgår till "startbit" efter avslutat sändning kan man ganska sannolikt få en "tom" byte där med.
* På "gamla" drivkretsar är detta - efter vad jag har sett i datablad - inte ovanligt. Därför har man et terminering som dels ska släcka eko i ledningen pga. impedansproblem och dels lägga ett "inaktivt" DC-nivå på A & B. Detta betyder att man behöver 3 motstånd i varje ända som terminering.
Jag påstår inte att detta är problemet - men det kan vara värd att kolla att det inte är DC-problem när bussen är "flytande".
* När en RS485-enhet ska sända ska sändaren slås på. Innan dess är bussen "flytande" då alla enheter lyssnar.
* Tx ska slås på en kort stund innan det ska sändas.
* Om DC-nivån motsvarar en startbit innan Tx aktiveras kan detta ge en falsk startbit till en i övrig "tom" byte.
* Om DC-nivån sedan återgår till "startbit" efter avslutat sändning kan man ganska sannolikt få en "tom" byte där med.
* På "gamla" drivkretsar är detta - efter vad jag har sett i datablad - inte ovanligt. Därför har man et terminering som dels ska släcka eko i ledningen pga. impedansproblem och dels lägga ett "inaktivt" DC-nivå på A & B. Detta betyder att man behöver 3 motstånd i varje ända som terminering.
Jag påstår inte att detta är problemet - men det kan vara värd att kolla att det inte är DC-problem när bussen är "flytande".
Re: Hjälp med rs-485, modbus
Intressant! Jag har sett lösningar med tre motstånd, men då har ledningen vart matad med tex 5v. Jag har ingen separat matning på min linje.
Funkar det med tre 120ohm i var ända mån tro!?
Funkar det med tre 120ohm i var ända mån tro!?
Re: Hjälp med rs-485, modbus
Med 3 st 120 Ohm får du en impedans på 40 Ohm så det känns tveksamt!
Re: Hjälp med rs-485, modbus
Ska tillägga att jag endast har grundläggande kunskaper i ellära
Datasystem och programmering är jag hemma med däremot.
Helst vill jag ju hitta vart "felet" i min krets ligger. Att hårdkoda för att ta bort "skräp" ur svaret är för lätt
Datasystem och programmering är jag hemma med däremot.
Helst vill jag ju hitta vart "felet" i min krets ligger. Att hårdkoda för att ta bort "skräp" ur svaret är för lätt
Re: Hjälp med rs-485, modbus
Snälla, kan du inte börja svara på frågorna istället.buffedlic skrev:Enheten har tre val, id, baudrate och enhetsnamn. De är inställda för att matcha mottagaren. Trodde det var underförstårtt så frågan måste ha flimrat förbi obemärk från min sida, ledsen för det Tomas.
Länk:
http://www.ftdichip.com/Products/Cables/USBRS485.htm
Har använt CAS i windows, exakt samma svar.
VILKA ÄR inställningarna i din slav. Det finns inget som är underförstått.
Länk till slavens datablad
Vilken av FTDI's "kablar" använder du och hur är den konfigurererad?
Vad är CAS i windows.
När det gäller RS485 finns det oftast två "GND", en som är GND, dvs jord och en som är common, dvs återledaren.
på din kabel verkar det som att man benämner återledaren som GND, men är det samma i din slavenhet? Eller har du som brukligt både GND och common på den?
LÄNKAR!
- Jan Almqvist
- Inlägg: 1580
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hjälp med rs-485, modbus
Utan korrekt terminering och biasing kan kan får konstiga fenomen men jag undrar om inte null före och efter telegrammet är något som tillkommit med flit, kanske med goda avsikter.
En bra telegrammottagare ska kunna hantera detta.
En bra telegrammottagare ska kunna hantera detta.
Re: Hjälp med rs-485, modbus
'buffedlic skrev:Intressant! Jag har sett lösningar med tre motstånd, men då har ledningen vart matad med tex 5v. Jag har ingen separat matning på min linje.
Funkar det med tre 120ohm i var ända mån tro!?
Man använder i bland tre motstånd för att fixera DC-nivåerna, ett motstånd mot matning, ett mot common och ett mellan ledarna.
Jag tror dock inte detta är ett problem i detta fallet.
Mer troligt att ditt pytonscript eller dina inställningar är felaktigt.
Re: Hjälp med rs-485, modbus
Jag lutar åt det hållet jag med. första x00 kan också förklaras med att en del implementerat enhetsid med två byte för att förmå fler enheter på samma bus.Jan Almqvist skrev:Utan korrekt terminering och biasing kan kan får konstiga fenomen men jag undrar om inte null före och efter telegrammet är något som tillkommit med flit, kanske med goda avsikter.
En bra telegrammottagare ska kunna hantera detta.
Tomas:
Dator:
Raspberry pi
Ftdi usb, http://www.ftdichip.com/Products/Cables/USBRS485.htm
Driver: default ftdi laddat i kernel
Anslutningar: A, B, GND, VCC, 120om pin1, 120ohm pin2
Inställningar:
minimalmodbus.Instrument<id=0xb6c844e0, address=4, mode=rtu, close_port_after_each_call=True, precalculate_read_size=True, debug=True, serial=Serial<id=0xb6c861d0, open=False>(port='/dev/ttyUSB0', baudrate=19200, bytesize=8, parity='N', stopbits=2, timeout=0.1, xonxoff=False, rtscts=False, dsrdtr=False)>
Enhet:
Anslutningar: A, B, GND
Instälningar
ID: 4, Baudrate: 19200, Enhetsnamn: "" (tomt)
Kod för testning
Kod: Markera allt
#!/usr/bin/env python
import minimalmodbus
import sys
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True
minimalmodbus.STOPBITS = 2
instr = minimalmodbus.Instrument('/dev/ttyUSB0', 04) #port, slaveadress
#instr.serial.echo = False
instr.serial.timeout = 0.1
instr.precalculate_read_size = True
instr.debug = True
instr.serial.baudrate = 19200
print instr
i = 0
c = 0
while i < 1:
try:
#temp = instr.read_register(2, 1, 4, signed=False)
temp = instr.read_bit(0, functioncode=1)
print 'OK!'
print temp
i = 100
except ValueError:
c = c + 1
print 'Error'
print c
i = 1
except IOError:
c = c + 1
print 'Error'
print c
i = 1
Windows test
http://www.chipkin.com/products/softwar ... s-scanner/
Samt ett excelark som beräknar crc för svaren, för att se att svaren faktiskt var korrekta.
Ger samma svar som i linux, alltid 00 i början och slut.
SLUTSATS
Hårdvaru fel: min krets saknar något eller har fel failsafe. De konsekvent felaktiga svaren kan tala emot...
Mjukvaru"fel": Kan vara två bitars ID samt störning i slutet. Utvecklarna för enheten kan ha lagt in 00 i början och slut som ett finurligt trick för att lösa något?!?! Eller har de missförstått hur modbus implementeras?!!?
- Jan Almqvist
- Inlägg: 1580
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hjälp med rs-485, modbus
Null i slutet kan vara en fusklösning som används om man inte lyckas stänga av RS-485 drivern vid rätt tidpunkt. Det är en dålig lösning. Undvik.
Att null i början skulle vara en utökad adress håller jag för osannolikt. Man kan inte ha fler än 34 enheter på RS-485.
Att null i början skulle vara en utökad adress håller jag för osannolikt. Man kan inte ha fler än 34 enheter på RS-485.
Re: Hjälp med rs-485, modbus
http://www.simplymodbus.ca/faq.htm#2Byte
How does 2-byte slave addressing work?
Since a single byte is normally used to define the slave address and each slave on a network requires a unique address, the number of slaves on a network is limited to 256. The limit defined in the modbus specification is even lower at 247.
To get beyond this limit, a modification can be made to the protocol to use two bytes for the address. The master and the slaves would all be required to support this modification. Two byte addressing extends the limit on the number of slaves in a network to 65535.
By default, the Simply Modbus software uses 1 byte addressing. When an address greater than 255 is entered, the software automatically switches to 2 byte addressing and stays in this mode for all addresses until the 2 byte addressing is manually turned off.
- Jan Almqvist
- Inlägg: 1580
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hjälp med rs-485, modbus
Där ser man.
Men försöker du att adressera en slav med adress högre än 256 och vilken byte-ordning gäller?
Little-endian eller big-endian?
Att slaven ska svara med 2-byte adress om du skickar 1-byte har jag svårt att tro.
Men försöker du att adressera en slav med adress högre än 256 och vilken byte-ordning gäller?
Little-endian eller big-endian?
Att slaven ska svara med 2-byte adress om du skickar 1-byte har jag svårt att tro.
Re: Hjälp med rs-485, modbus
Har du en poäng i. Att sätta värden i enheten funkar ju.
Kan vi utesluta hårdvarufel?!?
Kan vi påstå att de som utvecklat enheten gjort en fullösning?!?
Länk till register förteckning.
http://se.ostberg.com/a023b937-88f6-4fd ... aa6fc6373d
Kan vi utesluta hårdvarufel?!?
Kan vi påstå att de som utvecklat enheten gjort en fullösning?!?
Länk till register förteckning.
http://se.ostberg.com/a023b937-88f6-4fd ... aa6fc6373d
Re: Hjälp med rs-485, modbus
Se föregående, Heru 100s ec A från ÖstbergTomasL skrev:Fortfarande vad är det för slavenhet, länk?