RevPI in Kombi mit B&R X67

Hier kannst du dein Revolution Pi Projekt der Community vorstellen
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPI in Kombi mit B&R X67

Post by Ingo »

Hi,

nun ist es bald geschafft, das Herzstück ist eingetroffen und Montiert (6WVT). Die Programmierung ist auch fertig und es Funktioniert so wie es soll. Nun kann es weiter gehen, der nächste Abschnitt steht an, das regeln der Wasserwerte.
PH und RGP soll ja auch der Pi übernehmen.
20170610_175005.jpg
20170610_175005.jpg (155.96 KiB) Viewed 15958 times
gruß
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPI in Kombi mit B&R X67

Post by volker »

:-) Glückwunsch so weit! Hast Du schon PLäne für die Mess-Sonden und deren Anschluss? Wir sind in anderen Bereichen nämlich auch schon mit pH, Leitfähigkeitsmessung , etc. konfrontiert worden und für diverse Bereiche gibt es da sicher Bedarf. Was wirdda so inder "Pool-Industrie" angeboten? Welche Schnittstellen? Welche Preise?
Unser RevPi Motto: Don't just claim it - make it!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPI in Kombi mit B&R X67

Post by Ingo »

Hallo Volker,

also als Schnittstelle kommt ein One Wire Analogmodul zum einsatz 0-10V, als Sonde kommt ein PH Probe Kit For Arduino r3 für 27€ zum einsatz. zum testen reicht das. Das One wire Teil kostet um die 70€.

Im normalen Poolbereich bekommst du auch eine Komplette regelung für PH und ORP für 199 € Angeboten (ohne Dosierpumpen) Extra 100 - 160€ pro pumpe. Aber ich wollte eben alles in einem Haben und nicht die ganze Wand mit sachen von X herstellern voll geballert haben. Es gibt da soviele und die preise haben nach Oben keine Grenze.
zumal ich dann auch die Dosierpumpen gleich selber mit verwalten kann und eben auch alles in der Visualisierung sehen kann wenn sie fertig ist.
Ok Pumpen die ich testweise benutze sind made in China 6V mit 35ml/min für schlappe 3€. Reicht aus um zu Dosieren.

bei der Berechnung werden wir sehen was wir für werte von dem One Wire dann bekommen, aber das sollte das kleinste übel sein. da was die Regelung des Ventils schon aufwendiger. :)
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPI in Kombi mit B&R X67

Post by volker »

okay. Und wie schließt Du die 1-wire Module an den RevPi?
Unser RevPi Motto: Don't just claim it - make it!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPI in Kombi mit B&R X67

Post by Ingo »

wir haben es so gelöst.
Im Pictory haben wir ein Virtuelles gerät erstellt.
In LC3 eine Virtuelle Variablenliste erstellt
//Virtuelle Eingänge fuer die Verwaltung der One Wire Geraete
AussenTemp_ist AT %IW1.235 : WORD; // Aussen Temparatur ist Wert
SolarTemp_ist AT %IW1.237 : WORD; // Solar Temparatur ist Wert
BeckenTemp_ist AT %IW1.239 : WORD; // Becken Temparatur ist
SolSp_Pool_ist AT %IW1.241 : WORD; // SolSp_Pool ist Wert
WW_Temp_ist AT %IW1.243 : WORD; // WW Temparatur ist Wert
PH_Wert_ist AT %IW1.245 : WORD; // PH ist Wert
OPR_Wert_ist AT %IW1.247 : WORD; // Redox ist Wert
Fuelstand_PooL_ist AT %IW1.249 : WORD; // Poolfüllstand ist

Derzeit verwalte ichg aber nur die Temparatursensoren damit. Das Prinzip mit den Sonden sollte aber das gleiche sein. Das werde ich sehen wenn ich diese dann habe.

Dann über Pyhton die Auswertung und übergabe an LC3

Code: Select all

[attachment=0]#!/usr/bin/python2

"""Konfiguration """
ip  = '192.168.178.122'
port = 5000 

# uuid oder Gera"tenamen auf SPS Variable
devicemap = {
    '3C0216245DD9EE28':'BeckenTemp_ist',
    'AA0216245C5CEE28':'AussenTemp_ist',
    'D50216247768EE28':'WW_Temp_ist',
    '020116275F62EE28':'KellerTemp_ist'
}

#demopath binary
pictory= '/opt/1WireService/piTest'

# runtime, keine A"nderungen vornehmen !!
import OneWire
import time
import os

import sys
# sys.exit(0)

fpid = os.fork()
if fpid!=0:
  # Running as daemon now. PID is fpid
  sys.exit(0)


try:
    while True:
        data = OneWire.connect1Wire(ip,port);
	#print data
        for key in devicemap:
	    #print key
	    try:
        	wert = data[key]['value']
        	cmd = pictory+' -w '+devicemap[key]+','+str(wert)+' 2> /dev/null >/dev/null'
        	# print cmd
        	os.system(cmd)
	    except:
                next;
        time.sleep(10)
    
    
except KeyboardInterrupt:
    print 'Break running';

Code: Select all

# -*- coding: utf-8 -*-
"""
Created on Wed Feb 22 23:10:36 2017
@author: axel
"""

""" Programm """
import socket


def readSocket(client_soc,lines):
    bytes  = [];
    tokens = [];
    data   = [];
    try:
        while lines > 0:
            byte = client_soc.recv(1);
            if not byte:
                token =  b''.join(bytes); # bytes zusammenfuegen
                tokens.append(token);     # token speichern
                data.append(tokens);
                return data;
            if (byte == "\n"):
                token =  b''.join(bytes); # bytes zusammenfuegen
                tokens.append(token);     # token speichern
                bytes  = [];
                data.append(tokens);
                tokens  = [];
                lines -= 1;
            elif(byte == "|"):
                token =  b''.join(bytes); # bytes zusammenfuegen
                tokens.append(token);     # token speichern
                bytes = [];               # byte leern
            elif (byte == "\r"):
                continue;
            else:
                bytes.append(byte);
    except socket.timeout:
         data.append(tokens);
    return data;
    
def getInfo(socket):
    # print "Send INFO command";
    socket.settimeout(1);
    socket.sendall("get,sys,info\r\n");
    value = {}
    entrys = readSocket(socket,10)
    for e in entrys:
        if (len(e)==2):
            value.update({e[0]:e[1]})
    return value
    
def setNeededConfigure(socket):
    cmds = [
        "set,owb,search,2",
        "set,sys,dataprint,1",
        "set,owb,owdid,0",
        "set,owb,owdidformat,1"
    ]
    for cmd in cmds:
        socket.sendall(cmd+"\r\n");
        #print cmd,':', readSocket(socket,1);    

def getDeviceCount (socket):
    socket.sendall("GET,OWB,COUNT\r\n");
    data = readSocket(socket,1);
    # print data
    try:
        c=int(data[0][1]);
    except ValueError:
        c=0;
    except IndexError:    
        c=0;
    return c


def getDevices(socket):    
    # print "Send Device command";
    socket.sendall("get,owb,listall\r\n");
    return readSocket(socket,32);
    
def getDevicesValue(socket,devcount):    
    # print "Send Devicevalue command";
    # print "get,sys,data\r\n";
    socket.sendall("get,sys,data\r\n");
    return readSocket(socket,devcount);    
    
def getSettings(socket):    
    # print "Send Setting command";
    socket.sendall("get,sys,setting\r\n");
    return readSocket(socket);
    
def connect1Wire(_ip,_port):
    client_soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
    client_soc.settimeout(5);
    try:
        client_soc.connect((_ip,_port));
        info = getInfo (client_soc);
        setNeededConfigure(client_soc);
        devcount = getDeviceCount (client_soc);
        data     = getDevicesValue(client_soc,devcount+1);
        devices  = getDevices     (client_soc);
        client_soc.close();
        info.update({'devcount':devcount});
        for device in data:
            if len(device)!=2:
                continue
            for devinfo in devices:
                if (len(devinfo)==0):
                    continue
                if (device[0]==devinfo[1]):
                    z = {'uuid':devinfo[2],'value':device[1],'device':devinfo[4]}
                    info.update({device[0]:z})
                    info.update({devinfo[2]:z})
                    
        return info
            
    except socket.timeout:
        print "Socket Timeout"
        return
    except socket.error, exc:
        print "Caught exception socket.error : %s" % exc
hoffe du kannst damit etwas anfangen
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPI in Kombi mit B&R X67

Post by volker »

Ach so, also eigentlich gar nicht 1-wire sondern Ehternet... Ich dacht schon Du wolltest jetzt reguläres 1-wire fahren. Da haben wir nach wie vor keine Lösung für. Verwendest Du jetzt en Buskoppler von esera für die Umsetzung?
Also ich würde halt eigentlich für so eine Lösung eher Modbus empfehlen. es ist einfach er solidere Bus und absoluter Industriesdtandard. inzwischen haben wir ja auch den Modbusmaster im revPi integriert, so dass Du direkt in LC3 die Variablen aus dem PA zur Verfügung hsats, die der Modbus Master sich zyklisch von den Slaves holt. Hier mal ein Link für Modbus Slave Adapter, die Temperatur können und preisgünstig sind:
http://inveo.com.pl/nano-temp-en/ gibts direkt beim hersteller aus Polen oder teurer auch hier: https://www.amazon.de/NANO-TEMP-PLUS-ex ... B01C8O6YX2
Und Analog-Spannungseingang gibt es z.B. auch ganz gute und günstige Sachen, allerdings dann Modbus RTU (bracuht USb Umsetzer):
https://www.arigo-software.de/de/shop/0 ... s-RTU.html

Mit dem esera Analogeingangsmodul für 70 Euronen kommst Du dann aber sicher am günstigsten. Ist halt mit dem Arduino Shield und den 5V Stromversorgung dafür scon ein wenig Getüftel - aber eben günstig...
Vergleich: Professionelle Lösung mit JUMO Aquis 500 und unserem AIO (soll im Juli endlich verkauft werden) kommst Du auf über 1000 Euro ohne Sonden.
Unser RevPi Motto: Don't just claim it - make it!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPI in Kombi mit B&R X67

Post by Ingo »

ja ich weiss das es über Modbus einfacher gehen würde. Aber zu diesem Zeitpunkt als die Planung der Hardware anstand hattet ihr noch kein Modbus im PI im Angebot. Ich hätte dann auch anders geplant. Es gibt bei Esera ein Modbus gerät was aber auch gleich 100€ teurer gewesen wäre.
nur konnte ich dieses nicht verwenden und hatte mich zu dem TCP/IP gerät entschieden.
Axel ist ja schon an einer lösung dranne um das ganze ohne Pyhton zu verarbeiten. Aber da kann ich noch nicht viel zu sagen.
Ok das mit der messsonde ist halt noch soeine sache.
Das Analogmodul von Esera ist günstig und die sonde bringt den Messumformer ja gleich mit der mir dann ein Analoges signal liefert. da dies mit 5V arbeitet sollte es kein Problem sein es direkt an das Modul anzuschliessen und die Werte zu verarbeiten. Im Prinzip funktioiert das genauso wie mit dem Temp. Senosren. (Hoffe ich) Testen macht schlauer. WEnn es so funktioniert wie ich es mir vorstelle sollte es eigendlich keine bastelarbeit werden. Einbauen Anschliessen Verarbeiten Fertig. So der Plan.
Für das nächste Projekt kann man ja auch gleich auf Modbus gehen, da es ja nun einen Master/Slave gibt im Pi ist das die bessere Wahl, da hast du ohne zweifel recht. Aber nun bei diesem Projekt ist es halt zu spät.
z.z benutze ich diesen
https://www.eservice-online.de/shop/1-w ... nittstelle
als Analogmodul kommt dieser dann zum einsatz.
https://www.eservice-online.de/shop/1-w ... stem?c=264
und als sonde sollte diese zum einsatz kommen
https://www.dfrobot.com/wiki/index.php/ ... :_SEN0161)
Einfacher wäre die ganze Sache schon wenn ihr sagt. OK wir entwikeln ein eigenes Onewire Modul was dann auch gleich über die PiBrigt arbeitet so das man sich diese umwege erspart. Auch sollte es Möglich sein diese Sonden an eure Analogmodule anzuschliessen was ja machbar wäre. Wenn dann die Module verfügbar sein werden.
Somit spare ich mir den umweg über OneWire/Analog.
Vieleicht gibt es ja auch schon einen Ansatz dafür. (OneWire).
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPI in Kombi mit B&R X67

Post by volker »

Wie ich das sehe brauhst Du zusätzlich für Deinen Aufbau ein 5V Netzteil, denn der Messwandler arbeitet mit 5V Versorgung (das 1-wire Modul versorgt sich ja selber über den bus).
1-wire ist leider kein strategisches Produkt für uns, weil einfach nicht weit genug in der Industrie verbreitet. Wir arbeiten aber ja grade an dem RevPi Communication, der in seinem Kommunikationsteil intern für die Erweiterung mit diversen Modems vorbereitet ist. Dies geschieht dann normalerweise über USB/UART oder SPI. Leider wird 1-wire meistens auf I2C umgesetzt. Aber Maxim hat den DS2480B, der auf UART umsetzt. Ich prüfe, ob man den für eine Alternativbestückung einplanen kann, so dass zumindest eine Chance auf eine halbwegs bezahlbare Lösung besteht.
Unser RevPi Motto: Don't just claim it - make it!
User avatar
Ingo
Posts: 267
Joined: 10 Nov 2016, 21:56
Location: Luth.Wittenberg

Re: RevPI in Kombi mit B&R X67

Post by Ingo »

nein eigendlich ncht, das Analogmodul stellt die 5V zur verfügung ich brauche nur die 12V an meinem Netzteil abgreifen zur versorgung des 1wire analogmodul die 5v an busleitung ist getrennt von rest. somit erspare ich mir ein weiteres kleines netzteil, was aber auch nicht das problem darstellen sollte da noch Platz vorhanden ist für ein kleines steckernetzteil.
Ich wollte mich sowieso noch mit esera in verbindung setzten ob es nicht auch möglich ist anstatt der 12v mit 24v zu arbeiten da der spannungsteiler bis 25V abrbeiten kann.
Ich kann aber auch noch warten bis bei euch die Analogmodule zur verfügung stehen, da das weitere Projekt erst später weitergefürt wird. Es ist zwar in Planung gewesen es über 1-Wire zu steuern aber es kann auch gut über die Module von euch gemacht werden.
derzeit versuchen wir ersteinmal den Modbus zum laufen zu bekommen. Was nicht so richtig funktionieren will.
Ich habe keinen Plan welche Adressen und Register ich für die E/A von der LC3 habe. Aber das eine andere Geschichte.
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPI in Kombi mit B&R X67

Post by volker »

Das Analogmodul 1-wire hat eigentlich keinen 5V Ausgang laut Anschlussplan, woher stammt Deine Info?
egen Modbus: Am besten schaust Du Dir einfahc mal das Tutorial an. Wenn Du mit PiCtory alles gut konfiguriert hast und dann mit piTest mal kontrollierst, ob die Daten im PA landen, dann solltest Du diese Daten auch völlig problemlos wie jede andere IO Daten mit LC3 importieren können. Ichgehe davon aus, dass Du den Modbus Master verwendest. Bitte unbedingt Modbus Registeradressen und PA-Offsets auseinanderhalten. Das hat primär erst mal rein gar nichts miteinander zu tun. Welche Modbus-Register wie oft pro Sekunde abgefragt werden und in welche PA-Variablen dann die übe Modbus bezogenen Werte abgelegt werden, das alles wird im PiCtory konfiguriert. Dirk hat das aber sehr ausfürlich in den Tutorials beschrieben.
Unser RevPi Motto: Don't just claim it - make it!
Post Reply