INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Temperaturerfassung für SPS
22.09.2015, 08:58 (Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2015 09:06 von Binatone.)
Beitrag #1
Temperaturerfassung für SPS
Ich hab ne SPS, die insgesamt 8 Temperaturen per PT 100 Sensoren erfasst und eine Klimaregelung samt Heizung darauf aufbaut.
Dazu benötigt die SPS analoge Inputs, die nicht gerade preiswert zu beschaffen sind.
Gleichzeitig hat die Praxis gezeigt, das die Werte trotz ordentlicher Abschirmung um bis zu 1,5 Grad Celsius schwanken, was wohl auf die Verwendung von Frequenzumrichtern zurückzuführen ist, die die Ventilatoren ansteuern.

Idee:
1. 8 Dallas Temperatursensoren DS18B20 an einen Arduino
die Dinger arbeiten digital, es kommt auf ein bischen Spannungsschwankung nicht an, solange da HIGH und LOW klar unterschieden werden kann.

2. Zuordnung im Arduino von den Sensoren zu den Messpunkten 1-8

3. Übertragung an die SPS

Hierzu hab ich einfach einen Ausgang des Arduinos über nen Transistor gelegt, der nun 24V digital schaltet.
Ein Spannungsteiler zieht die 24V eines SPS Ausgangs auf 5 Volt runter.

Auf beiden Seiten werden die zu übertragenden Werte zu einem 8 Bit Signal gewandelt und dann "seriell" zur anderen Seite geschickt.

Ich nutze also die Werte von 0 - 255 bei einer Auflösung von 0,25 Grad / Bit.
sprich 0 - 63,5 Grad oder in meinem Fall -10 bis +53 Grad

Jedes Bit muss etwa 50ms lang sein, folglich braucht man für eine Übertragung 50 x 8 Bits = 400 ms.
Auf beiden Seiten ist darauf zu achten, das die Spannungsmessung mitten im Zeitfenster erfolgt, damit sicher ist, das die Spannung auch voll anliegt oder abgefallen ist.

Weil das Ganze wechselseitig erfolgt, die SPS also ein Signal ausgibt "gib mir Sensor 3" und dann die Antwort vom Arduino empfangen wird, braucht man insgesamt also 0,8 sek für eine Messung oder 6,4 Sekunden für alle 8 Sensoren.



Aber: es funktioniert, und mir reicht eine Erfassung theoretisch alle 5 Minuten...

Positiver Nebeneffekt: ich benötige nur Digitale Ein- bzw Ausgänge, die sehr kostengünstig sind, die analoge Eingangsgruppe ist demnächst in der Bucht zu bekommen.

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2015, 16:47 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2015 16:48 von opferwurst.)
Beitrag #2
RE: Temperaturerfassung für SPS
Hallo Binatone

Endlich, ich suche schon länger genau Deine Möglichkeit mit einem Arduino und mehreren DS18B20 eine SPS mit Temperaturwerten zu füttern. Ich beschäftige mich erst recht kurz mit SPSs, die Arduinos kenne ich schon etwas besser. Ich habe also ergo gleich mal ein paar Fragen:

1. ..."Dazu benötigt die SPS analoge Inputs" meinst Du damit die Meesumwandler ala AM2 oder die analogen Eingänge 0-10V der SPS?
Ich besitze eine ECC-PNAL2-24MR-D (baugleich Mitsubishi Alpha2) mit digitalen und analoge Eingänge (0-10V) - welche Eingänge muss ich für Deine Anwendung verwenden?

2. Der Spannungsteiler ist lediglich für die Stromversorgung des Arduinos zuständig?
3. Könnte man auch anstatt eines Transistors einen Optokoppler verwenden?

Wie hast Du Deine SPS für die Abfrage programmiert und wie sieht Dein Sketch aus?

Danke schon einmal

Viele Grüsse
opferwurst
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 12:26
Beitrag #3
RE: Temperaturerfassung für SPS
Ich bin grad unterwegs und hab die Programme nicht dabei.
Ich will aber in der Theorie umschreiben, was ich bisher (durch viel probieren) hingekriegt habe.

1.
Es werden keine analogen Aus-/Eingänge benötigt! (preiswert)
Normalerweise kommen ja per PT 100 entweder Signalverstärker zu Einsatz oder spezielle Eingangsgruppen seitens der SPS, die für PT100 geeignet sind.
Theoretisch könnte man ja auch von dem Arduino über einen PWM ein 0-5V Signal erzeugen und dieses mittels 0-10V Eingang wieder in der SPS erfassen.
ABER: ein PWM ist nie ein glattes Signal, je nachdem, wann die SPS den Eingang abfragt, kann der Arduino gerade EIN oder AUS schalten.
Es müsste also per Kondensator das Signal erstmal geglättet werden.
Darum ja der Umstieg auf komplett digital, was zwar langsamer ist, aber dafür präziser.
2.
Ein Spannungsteiler macht aus 24V etwa 8-9 Volt für die Versorgungsbuchse des Arduino. (Achtung, man braucht Widerstände von etwa 1 Watt oder mehr)
Zwei weitere Spannungsteiler bringen die 24V aus 2 digitalen Ausgängen auf etwa 4,5 Volt für zwei Eingänge des Arduino

3. Ich hab mich für Transistor entschieden, der die 24V für einen Digitalen Eingang der SPS bereitstellt. Optokoppler geht vermutlich auch, allerdings muss der die (SPS-) 24Volt aushalten.


Ablauf:
SPS gibt über 2 Timer den Takt vor. Grund: Zykluszeit SPS liegt bei 10-20 ms, Arduino ist deutlich flotter.
SPS schaltet über einen Ausgang um zwischen SENDEN und EMPFANGEN
Arduino Gibt also Antwort, wenn das Signal aus ist und wartet auf Anweisungen, wenn das Signal High wird.
Anweisungen kommen über den Zweiten Eingang (bzw. Ausgang der SPS).

Hab mir für die SPS einen Baustein in strukturiertem Text geschrieben, ich weis grad nicht, wie Deine SPS programmiert wird.
Der Takt von den beiden Timern ist die Grundlage.
Danach wird eine INT Var (X) von 0-7 hoch gezählt. (Immer bei positiver Flanke!)
Bei 8:
Rücksetzen auf 0
Umschalten Empfang/Senden

Start Senden: (SPS)
Ausgang Senden = TRUE
Eingangswert (0..255) lesen und wandeln in Bitcode (Array bool 0..7) (aus "9" wird z.B. 10010000 im Array)
dann:
Immer wenn X sich ändert, wird Array(X) auf den Signalausgang gelegt.
Arduino erkennt Umschaltung Senden/Empfangen, wartet etwas ab (halbe TimerZeit) und belegt dann ein bool Array mit dem Eingangswert vom Signal.
Diese Wartezeit ist erforderlich um mitten im Signal gezielt den Pegel zu erfassen, sonst kann eventuell das vorige Bit erfasst werden = Fehlerhafte Endwerte.


Start Empfang (SPS)
Ausgang Senden = False
wieder hochzählen von X (0..7)
Immer wenn der Timerpuls ABFÄLLT (negative Flanke) wird der Signal Eingang vom Arduino in ein Array geschrieben.
Am Ende wird das Array umgewandelt in eine INT Zahl.
Int Y = 1
int Endwert = 0
Schleife 0..7
{
if Array(Schleife) then
{
Endwert = Endwert plus Y
}
Y=Y*2
}



Zuletzt wird der Endwert noch in Grad umgewandelt (* 4 - 100 oder so ähnlich)


Dies mal so eben schnell erklärt aus dem Kopf und ohne Gewähr Smile

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 12:33
Beitrag #4
RE: Temperaturerfassung für SPS
Hi,
da ich auch weiß was eine SPS ist stelle ich mir die Frage welcher Art von Digitaleingangsfunktion da aufgerufen wird um einen Seriellen Datenstrom zu erfassen ?
Welche SPS - Hersteller - Typ ist das denn wo die Arduino Daten lesen soll ?
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 13:53
Beitrag #5
RE: Temperaturerfassung für SPS
Es handelt sich um eine S7 CPU 314
Der Baustein zur Erfassung dieses "Datenstroms" wurde in SCL komplett selbst erstellt.
Details finden sich bereits oben im Text.
Bis jetzt funktioniert das Ganze zwar, aber es ist noch nicht ausgereift und sieht noch recht chaotisch aus.


Ich arbeite gerade an der Erkennung der DS Sensoren und einer einfachen Möglichkeit, später defekte Sensoren auszutauschen.

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 15:33
Beitrag #6
RE: Temperaturerfassung für SPS
Falls Ethernet ein Thema ist gibt es diese tolle Seite:

http://settimino.sourceforge.net/

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 18:26 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2015 18:27 von Binatone.)
Beitrag #7
RE: Temperaturerfassung für SPS
Naja, ich hab leider einzig die PG Schnittstelle.
Darum der Umweg über diesen komplizierte selbst gestrickten Funktionsbaustein.

Im Arduino will ich im Eprom die Adressen der Dallas Sensoren speichern, damit die später auch nach einem Stromausfall eindeutig zugeordnet werden können.
Dazu will ich auch die Nummern 1-8 im Eprom ablegen.
So kann im Arduino jeder Sensor dieser Nummer 1-8 zugeordnet werden.
Bei einer Abfrage der Sensoren, wird dann geschaut, welcher Sensor zu welcher Nummer gehört.
Dann wird ein Array (1..8) mit den Temperaturwerten gefüllt.
Dazu muss die SPS erstmal den Aufruf geben mit z.B. Dem Wert 255.
Dann gibt die SPS den Wert 1
Arduino antwortet mit Temperatur 1
Das Ganze 8 mal für auch die Werte 2-8.

Der FB in der SPS stellt die Werte 1-8 dann als Ausgang zur Verfügung.
So werden sie einfach mit dem DB für die Temperaturen verknüpft.
Andere FBs arbeiten damit dann weiter.

Soweit bin ich bis jetzt, aber wenn ein neuer Sensor eingebaut wird, fehlt mir noch die Zuordnung.

Hab keine Lust erst dem Ardu ein neues Programm zu schießen, nur weil ein Sensor neu kam.

Ideal wäre es, wenn man am TouchScreen der SPS entsprechende Eingaben machen könnte.
Im Augenblick mach ich es über diese Textausgabe, die beim Arduino mit dabei ist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.09.2015, 18:51
Beitrag #8
RE: Temperaturerfassung für SPS
(25.09.2015 18:26)Binatone schrieb:  Funktionsbaustein.
ABAP-Entwickler?

Zitat:Soweit bin ich bis jetzt, aber wenn ein neuer Sensor eingebaut wird, fehlt mir noch die Zuordnung.
Hab keine Lust erst dem Ardu ein neues Programm zu schießen, nur weil ein Sensor neu kam.
Ich habe mal so etwas ähnliches gemacht, nur mit Homematic Wired statt einer SPS und mit bis zu 10 DS18B20. Das läuft so: Bei jedem Reset sucht der Sketch nach Sensoren. Wenn er eine Adresse findet, die schon im EEPROM ist, dann wird der Sensor ignoriert. Ansonsten wird er dem ersten "freien" Platz im EEPROM zugeordnet. Dadurch kann man relativ einfach neue Sensoren einhängen.
Das Ersetzen eines Sensors ist ein bisschen aufwändiger. Bei HM Wired gibt es einen "Factory Reset". Bei dem wird das EEPROM "gelöscht" (also mit 0xFF überschrieben). Um einen Sensor zu ersetzen muss man alle Sensoren vom Bus nehmen und einen Factory Reset machen Dann nach und nach die Sensoren wieder einhängen und zwar in der Reihenfolge, wie man sie braucht.
Das ist zwar nicht ganz so komfortabel, funktioniert aber.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste