Jump to content

MMS

Members
  • Gesamte Inhalte

    17
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von MMS

  1. Tritt es auch auf, wenn du die beiden Master Bricks im 2er Stack vertauscht, also den oberen zum untern machst und umgekehrt (natürlich mit Bricklet am oberen)? Sprich, ist es die Position im Stack, oder betrifft das nur einen ganz bestimmten Master Brick?

     

    Es liegt an der Position im Stack. Ich kann die Master vertauschen oder auch andere Master einsetzen. Das Problem bleibt das selbe.

     

     

    Tritt das Problem denn jetzt auch bei den 1er Stacks auf, wenn du einen Master Brick mit Bricklets hinzusteckst?

     

    Kann ich leider nicht testen, da schon alles fest verbaut ist.

     

    Welche Bricklets hast du denn am oberen Master Brick, wenn das Problem auftritt?

     

    Ich teste überall nur mit PTC Bricklets. Diese funktionieren am unteren ohne Prbleme, wenn ich sie nach oben stecke tritt das Problem auf.

     

    Und was ist eigentlich mit den 3er Stacks? Warum tritt das Problem dort nicht auf? Was macht den Unterschied, hast du da andere Bricklets dran, oder macht die Step-Down Power Supply da den Unterschied?

     

    Ich hatte zunächst noch andere Bricklets dran (Humidity, Ambient Light, IO16). Diese habe ich allerdings für die Tests abgesteckt. Nun hängen überall nur PTC Bricklets, die einzeln alle funktionieren. Da der 2er Stack mit Spannungsversorgung vom Laptop und der 3er mit der Step-Down Supply läuft denke ich, dass die Art der Spannungsversorgung eine Grund ist. Aber scheinbar nicht der einzige.

     

  2. Ich habe jetzt herausgefunden, dass ich an den unteren Master so viel Bricklets (PTC) hängen kann wie ich will und es funktioniert. Sobald ich aber an den 2ten Master mehr als 1 Bricklet hänge dauert es 2 min bis ich eine funktionierende Verbindung bekomme. Auch wenn der untere Master mit keinen Bricklets belegt ist.

     

    Das erklärt auch warum der Test an dem 1er Stack mit zusätzlichen Mastern kein negatives Ergebnis brachte, da ich keine zusätzlichen Bricklets zum anschließen hatte.

  3. Die 5,1V sind am USB Anschluss des versorgten Master Bricks gemessen? Wie hast du die gemessen?

     

    Gemessen habe ich mit einem Digitalmultimeter, direkt an der Verbindung vom Anschlusskabel zum USB Stecker.

     

    Du sagtest, dass alle Master Bricks die gleiche Firmware Version haben. Welche Firmware Version?

     

    Welche Hardware Version haben die Master Bricks?

     

    Firmware: 2.3

    Hardware: 2.1

     

    Wenn du die Stromversorgung des problematischen Stack anschließt dann leuchten die vier blauen LEDs am Master Brick auf. Daran kannst du erkennen, dass der Master Brick gestartet wurde. Leuchten diese LEDs nochmals im Betrieb auf, vielleicht so 20 Sekunden bevor die RS485 Kommunikation wieder funktioniert? Sprich der Master Brick startet sich selbst neu und dann funktioniert es wieder?

     

    Nein, die blauen LEDs leuchten nur am Anfang beim Einstecken des USB Kabels.

     

    Was passiert, wenn du in die funktionierenden 1er Stacks noch einen Master Brick dazu steckst? Tritt dann bei diesen das Problem auch auf?

     

    Dieser Stack funktioniert mit zwei und auch mit drei Master und 4 Bricklets. Ich habe nicht mehr zum testen.

     

    Was passiert, wenn du den problematischen 2er Stack mit einer Step-Down Power Supply unterm Stack versorgst, statt über den 5V Ausgang einer externen Step-Down Power Supply?

     

    Mangels Step-Down Power Supply kann ich das nicht testen, aber da es mit USB vom Laptop geht, würde ich sagen das geht auch.

     

     

    Das komische ist ja, dass ich zunächst leere Antworten bekomme, dann schweigen und nach 2min gehts dann einwandfrei. Ich habe auch schon beide Master und den RS485 ausgetauscht. Ohne Verbesserung.

     

     

    EDIT: Könnte es denn an der Potentialerhöhung der Masse, durch die Kabellänge, liegen? Diese sollte etwa 0,05V bei 200mA sein.

  4. Die beiden 3er Stacks habe also jeweils eine Step-Down Power Supply. Der problematische 2er Stack hängt mit seinem USB Anschluss am grünen 5V Ausgang einer dieser Step-Down Power Supplies. Oder wie speist du die 5V da ein? An welcher Step-Down Power Supply hängen dann die beiden 1er Stacks die ohne Probleme funktionieren?

     

    Ja, jeder 3er Stack hat ein Step-Down. An einem hängt ein 1er an dem anderen ein 1er und der 2er. Eingespeist wird über den USB Port.

     

    Heißt "einzeln" ohne den zweiten Master Brick, oder auch ohne Bricklets?

     

    Ohne den zweiten Master, aber mit den Bricklets und der RS485 Extension.

     

    Wie werden die Step-Down Power Supplies versorgt? Alle vom gleichen oder von verschiedenen Netzteilen? Welche Ausgangsspannung und Ausgangsleistung haben die Netzteile?

     

    Versorgt werden die Step-Down Power Supplies über einen 100Ah 12V Bleiakku. Dieser ist über 10m 2x2x0,5mm² (Spannungsvers. und RS485) Kabel angeschlossen. Danach geht es weiter mit den 5V über 7m zu dem 2er Stack mit dem gleichen Kabel. Der 1er Stack ist auch mit ca 7m Kabel angeschlossen.

  5. Ist an dem Stack der länger braucht irgendetwas anders als an den anderen Stacks?

    Ich habe zwei Stacks mit 3, einen mit 2 und zwei mit 1 Master. Der fehlerhafte ist der einzige mit 2 und bekommt 5V (sind genau 5,1V am Anschluss) von einem DC Brick, der an einem 3er Stack hängt. Genauso wie die 2 mit 1 Master.

     

    Überall hängen PTC Bricklets. An diesem Stack, als einziger, auch ein IO-16.

     

    Firmwares sind alle gleich.

    Mit welcher Baudrate kommunizierst du?

     

    38400 baud

     

    Welche Sequence Number hat die erste Antwort die du bekommst? Ist es immer die gleiche Sequence Number?

     

    Zunächst mal bekomme ich eine Zeit lang gar keine Antwort. Wenn ich eine Antwort bekomme ist es dann die Nummer dich geschickt habe. Hier die ersten zwei Antworten des Stacks (Anfrage  eines PTC Bricklet) in HEX:

     

    0d640200000000080000006423 (leere Antwort)

    0d640281d767000c011800ae090000f395 (richtige Antwort)

     

    Manchmal bekomme ich auch nur leere Antworten. Nach ca 2 min geht dann alles wieder wie bei den anderen Stacks.

     

     

  6. Ok. Danke, da hätte ich doch genauer lesen sollen.

     

    Ich habe jetzt insgesamt 5 Stacks mit insgesamt 40 Sensoren über RS485 verbunden. Die Abfragen funktionieren ganz gut. Wenn ich aber die Versorgungsspannung ab und wieder anschalte braucht ein Stack über eine Minute, bis er auf Anfragen antwortet. Alle anderen sind nach ca. 20s wieder online.

     

    Hat jemand eine Idee an was das liegen könnte?

     

    Gruß

    MMS

  7. Hallo,

     

    ich würde gerne mehrere Stacks über ein längeres Kabel mit einer Zentralen 5V Spannungsversorgung betreiben. Was ist denn die minimale Versorgungsspannung (an der USB Buchse) eines Stapels aus 4 Master und einem RS485 Brick?

     

    Edit:

    Und was wäre die maximale Eingangsspannung an der USB-Buchse?

  8. Hallo,

     

    zur Hardware:

    -Rasperry Pi mit aktuellem Raspian und Python 3

    -Raspicomm Erweiterung für RS485 (andere RS485 Boards bei denen man den RTC Pin für die Datenrichtung manuell setzen muss gehen auch, machen das programmieren aber sehr aufwändig)

    -ein Stück dreiadriges Kabel

    -Masterbrick mit RS485 Extension

     

    Hier der Python Code. Er funktioniert ist aber ein erster Entwurf und noch nicht optimiert.

     

    @borg: passt denn die Bestätigung nach erfolgreicher Abfrage:

    0x01, 0x64, modbus_sequence, crc16

     

     

    import serial
    import time
    import crc16
    
    
    def get_value(port, mod_adr, mod_seq, tcp_seq, func_id):		#Abfrage des Bricks
    
    flag = True													#Flag True bis Abfrage erfolgreich
    
    
    req = bytearray([0x01, 0x64, mod_seq, mod_adr[0], mod_adr[1], mod_adr[2], mod_adr[3], 0x08, func_id, tcp_seq, 0x00])		#bytearray für modbus/tcp Abfrage
    
    crc_req = 0xFFFF
    for x in range (0, 11):										#Prüfsumme berechnen
    	crc_req = crc16.calcByte( int.from_bytes(req[x:x+1], byteorder='big'), crc_req)
    
    req[11:13] = crc_req.to_bytes(2, byteorder='little')		#Prüfsumme anhängen
    
    
    ack = bytearray([0x01, 0x64, mod_seq])						#bytearray für modbus Bestätigung
    
    crc_ack = 0xFFFF
    for x in range (0, 3):										#Prüfsumme berechnen
    	crc_ack = crc16.calcByte( int.from_bytes(ack[x:x+1], byteorder='big'), crc_ack)
    
    ack[3:5] = crc_ack.to_bytes(2, byteorder='little')			#Prüfsumme anhängen
    
    
    
    while flag:													#solange Abfrage nicht erfolgreich
    	port.write(req)											#Abfrage schicken
    	ans = b'\x00'
    	ans = port.read(20)										#Antwort empfangen
    
    	leng = int.from_bytes(ans[7:8], byteorder='big')		#Länge des TCP Packets bestimmen
    
    	crc_ans = 0xFFFF
    	for x in range (0, leng+3):								#Prüfsumme der Antwort berechnen
    		crc_ans = crc16.calcByte( int.from_bytes(ans[x:x+1], byteorder='big'), crc_ans)
    
    	if bytearray([0x01, 0x64, mod_seq, mod_adr[0], mod_adr[1], mod_adr[2], mod_adr[3]]) in ans[0:7]:		#Antwort mit Abfrage vergleichen (Adresse)
    		if (int.from_bytes(ans[leng+3:leng+5], byteorder='little')) == crc_ans:				#Prüfsumme kontrollieren
    			port.write(ack)									#Bestätigung senden
    			if leng > 8:									#wenn Daten vorhanden
    				val = int.from_bytes(ans[11:11+leng-8], byteorder='little')			#Daten ausgeben
    				return val
    			else:
    				return 0
    			flag = False
    	else:
    		flag = True											#fehlerhafte Antwort, erneuter Versuch
    
    
    
    if __name__ == "__main__":										#Hauptprogramm
    
    port = serial.Serial(port='/dev/ttyRPC0', baudrate=115200, timeout=2)		#Port öffnen, 115200 Baud, 8N1
    
    
    time.sleep(.1)
    
    mod_adr = bytearray([0x98, 0x83, 0x00, 0x00])				#Adresse des Brick/Bricklet
    mod_seq = 0x01												#Modbus sequence number
    tcp_seq = 0x01												#TCP sequence number
    func_id = 0x01												#Funktions ID
    
    value = get_value(port, mod_adr, mod_seq, tcp_seq,func_id)	#Abfrage
    
    print ("Wert: %d\n" % value)								#Wert ausgeben
    

     

    Verbesserungsvorschläge und Fragen sind natürlich wilkommen.

  9. Ok. Danke, habe eine falsche Zeichntabelle verwendet.

     

    Ich versuche direkt über die RS485 Extension (Slave, Adresse: 1) mit einem Ambient Light Bricklet (UID: b1Q) zu kommunizieren. Wenn ich folgendes sende müsste ich doch die Helligkeit als Antwort erhalten:

     

    Modbus Adress: 0x01

    Func. Code:    0x64

    Seq. Num:      0x01

    UID:          0x98 0x83 0x00 0x00

    Packet Length: 0x08

    Func ID:      0x01

    Seq. Num.:    0x18

    Flags:        0x00

    CRC16:        0xAE 0x41

     

    Ich bekomme aber nur 0x00 zurück. Habe ich irgendwo einen Fehler übersehen?

×
×
  • Neu erstellen...