Go Down

Topic: 3 controllinos als "eine controllino" (Read 1 time) previous topic - next topic

AndreasLiotta

Jun 10, 2019, 11:22 am Last Edit: Jun 10, 2019, 12:57 pm by AndreasLiotta
Hallo Community,

mein erster Post :) . Ich hoffe ihr könnt helfen.
Ein Produktionssystem Liefert Status-werte (Fehlerstatus) über Relay Kontakte Insgesamt 36 / 12 Pro Controllino. Es ist möglich das vom Produktionssystem mehrere zB A0 Eingänge gleichzeitig geschalten werden. Pro ausgelöstem Relay kontakt wird ein Befehl zum öffnen eines Skriptes an einen externen Server geschickt. Dabei konnte ich beobachten das wenn mehrere Kontakte gleichzeitig betätigt wurden das Abspielen der Skripte nicht wie gewünscht funktioniert.

Jetzt meine Konkrete Frage Wie stell ich sicher das wenn mehrere Kontakte vom gleichen Eingang (zB 2mal A0) gleichzeitig bei 2 oder 3 Controllinos ankommt die Skripte sich gegenseitig stören. gibt es eine möglichkeit dass die 3 controllinos  quasi als "eine controllino" arbeitet.

Freundliche Grüße
Andi


Tommy56

#1
Jun 10, 2019, 11:26 am Last Edit: Jun 10, 2019, 11:27 am by Tommy56
Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [*code] davor und [*/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Was macht der Server?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

HotSystems

Kannst du das auch verständlicher erklären ?
Am besten an einem Schaltbild.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

postmaster-ino

Hi

Er wird eine SPS o.Ä. haben, Deren Ausgänge bunt gemischt auf 3 Controllinos gehen.
Einige dieser Ausgänge gehen an mehrere Controllinos - warum auch immer.
Wenn jetzt 'A0' (wer immer Das ist) den Zustand ändert, sendet jeder der Controllinos, Die Das mitbekommen ein 'Obacht, Da ist was' an einen Server.
Blöd, daß Der so diese Meldung mehrfach bekommt und über so wenig Intelligenz verfügt, daß ein 8-Biter Da eingreifen muß ;)

Du könntest die Controllinos per I²C untereinander schwätzen lassen und nur einer davon 'schwätzt mit Mami' - Der kann dann auch entscheiden, ob Er 'hier drüber' bereits eine Meldung abgelassen hat.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

DrDiettrich

#4
Jun 10, 2019, 12:03 pm Last Edit: Jun 10, 2019, 02:07 pm by DrDiettrich
Wenn die Alarmmeldungen immer gleich lauten, was für einen Sinn macht es dann, gleiche Eingänge mehrfach zu melden? Statt z.B. "Alarm 1 1" für Alarm1 von Controllino 1?

Ein Mega hat genügend Eingänge, um alles zu überwachen. Der könnte dann auch auf ein "ready" vom Server warten, bevor er eine neue Meldung absetzt.

Ansonsten ist es eine Frage der Serverprogrammierung, daß der bei mehreren gleichzeitig eintreffenden Meldungen nicht ins Schleudern kommt.

AndreasLiotta

Zunächst einmal vielen Dank für Eure schnelle Antwort.

-der Server ist mein PC
 
Ich habe 36 verschiedene Alarme, deswegen verwende ich 3 Controllino (hinter jedem Alarm öffnet sich eine Audiodatei und ein Bild).

Ich habe es geschafft, mit einem Controlino, wenn 12 Skripte gleichzeitig ankommen,eine nacheinander zu spielen

mein Problem ist, wenn mehrere Alarme von verschiedenen Controllino gleichzeitig kommen, denn funktioniert mein code nicht mehr richtig, deshalb möchte ich, dass die Controllino miteinander kommunizieren oder die 3 controllinos als eine controllino verwende

PS: Bitte entschuldige für mein nicht perfektes Deutsch, mein Englisch ist genauso schlecht, leider kann ich nur Französisch oder ein wenig Deutsch.

Tommy56

Der bessere Weg dürfte eine saubere Programmierung auf dem Server sein.
Da haben wir aber von Dir zu wenig Infos über die Serveraufrufe und deren Verarbeitung.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

AndreasLiotta

#7
Jun 10, 2019, 12:48 pm Last Edit: Jun 10, 2019, 12:50 pm by AndreasLiotta
der Server, wie gesagt, ist mein PC, er tut nichts anderes, als eine Batch-Datei starten.
Diese Batch-Datei enthält das Bild und den Ton, was ich "Alarm" nenne

Gruß Andi

agmue

Wie schon in #3 geschrieben "Du könntest die Controllinos per I²C untereinander schwätzen lassen", wenn sie nah zusammen sind. Ein Master, zwei Slaves, das ließe sich programmieren. Bei größerer Entfernung ginge auch CanBus.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

uxomm

Always decouple electronic circuitry.

AndreasLiotta

Ich glaube auch, dass die Lösung I²C ist, weil die drei Controllinos nebeneinander liegen.Ich versuche immer noch wie kann ich dies im meimem-Code anpassen! Ich habe hier ein gutes Beispiel gefunden https://forum.arduino.cc/index.php?topic=19757.0
Ich weiß leider nicht, wie ich der Slave programmieren soll, wenn A0 vom Controllino 1 oder 2 gedrückt ist, es muss 3 Sekunden warten, falls beide gleichzeitig gedrückt sind

https://www.controllino.biz/tutorials/#1539865917557-80d9e6f8-d99f

DrDiettrich

Wie gesagt, ein einziger Arduino Mega kann die Aufgabe erledigen.

agmue

Ich versuche immer noch wie kann ich dies im meimem-Code anpassen!
Anregungen findest Du bei Nick Gammon.

Ich finde eine Meldeleitung vom Slave zum Master praktisch, damit sich der Slave beim Master melden kann, wenn eine Information vorliegt.

Möglicherweise genügt auch eine Besetztleitung ohne I2C: Ein PullUp-Widerstand zieht die Leitung auf 5V. Will ein Arduino an den PC senden und befindet sich die Besetztleitung auf HIGH, setzt er die Bestztleitung auf LOW und blockiert damit alle anderen Arduinos. Nur so eine Idee.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

AndreasLiotta

#13
Jun 11, 2019, 12:46 pm Last Edit: Jun 11, 2019, 12:48 pm by AndreasLiotta
Leider habe ich seit gestern das gleiche Problem
ich versuche, Daten vom Slave an den Master zu senden.
sehr einfaches Beispiel, nur damit ich das Prinzip verstehe. Der Master erhält keine Informationen vom Slave.
sieht jemand, wo mein Fehler ist oder was ich vergessen habe.

//master

Code: [Select]
#include <Wire.h>


void setup() {
 Wire.begin();        // join i2c bus (address optional for master)
 Serial.begin(9600);  // start serial for output

}

void loop() {
 Wire.requestFrom(8, 1);    // request 6 bytes from slave device #8

 while (Wire.available()) { // slave may send less than requested
   char c= Wire.read(); // receive a byte as character
   char q= Wire.read();

 Serial.print(c);         // print the character
 Serial.print(q);
 }

 delay(1500);
}



//Slave


Code: [Select]

#include <Wire.h>

void setup() {
 Serial.begin(9600); // Starting Serial Terminal
 Wire.begin(8);                // join i2c bus with address #8
}

void loop(){
 Wire.onRequest(requestEvent); // register event

 delay(1500);
}
void requestEvent() {

 Wire.write('Q');
 Serial.println("Sent");
}


die Verbindung zwischen den 2 Controllino, habe ich wie folgt aufgebaut:

agmue

#14
Jun 11, 2019, 12:54 pm Last Edit: Jun 11, 2019, 01:02 pm by agmue
Hat ein Controllino PullUp-Widerstände an SCL und SDA? Wenn nicht, 4,7 kOhm an 5V.

RS485 ist nicht I2C! SCL und SDA gibt es an X1.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up