# Polariät von Leitung prüfen



## Else_Eifrig (22 Januar 2009)

Hallo Forum, 

ich lese schon einige Zeit in eurem Forum mit und habe nun auch ein paar Fragen. Ich bin absoluter Anfänger was SPS-Programmierung angeht. 
Ich habe eine Steuerung von Mitsubishi FX1N-24MR-DS und möchte die Polarität bzw. den Durchgang von Leitungen, die mit einem Stecker und einer Kupplung verbunden sind, prüfen.

Also, die Leitungen habe ich so an die Steuerung angeschlossen:

Leitung 1:

Stecker +: X1 
Kupplung +: Y1
Stecker -: X2
Kupplung -: Y2

Leitung 2:

Stecker +: X3 
Kupplung +: Y3
Stecker -: X4
Kupplung -: Y4

Mein Plan ist es einen Funktionsbaustein zu erstellen, den ich immer wieder aufrufen kann, der die Leitungen dann so testet:

Input: i INT (i-te Leitung)
Output: Merker[0..3] BOOL (Array, bei 1 ok, bei 0 verpolt)
-------------------------------------
Yi & Xi -> setze Merker[0,i]
-------------------------------------
Yi & nicht Xi+1 -> setze Merker[1,i]
-------------------------------------
Yi+1 & Xi+1 -> setze Merker[2,i]
-------------------------------------
Yi+1 & nicht Xi -> setze Merker[3,i]
-------------------------------------

Kann man das überhaupt so machen? Also so, dass die Ausgänge variabel gesetzt werden? Und falls ja, wie?   Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt.
Viele Grüße und Danke.


----------



## vierlagig (22 Januar 2009)

Else_Eifrig schrieb:


> Also so, dass die Ausgänge variabel gesetzt werden? Und falls ja, wie?


 
jopp, kann man ... es gibt unterschiedliche möglichkeiten.

1. die einfache q&d: du setzt das "richtige" bit entsprechend deiner bedingung und setzt die anderen 3 zurück 
2. die elegante: du schreibst abhängig von der verknüpfung ein bitmuster in den speicherbereich. für Yi+1 & Xi+1 z.b.: 0100
3. die aufwändige: du schiebst das nibble nach links oder rechts entsprechend der stellen, die vom letzten zustand her notwendig sind um an die richtige stelle zu kommen

ich tendiere zu 1.


----------



## Else_Eifrig (22 Januar 2009)

Hallo!
"Einfach" ist immer gut. Ich verstehe nur nicht, was du damit meinst, wenn du sagst das "richtige" bit setzten und die anderen 3 zurück setzten?!
Was wäre denn das bit? i? Oder Yi? ..hilfe


----------



## vierlagig (22 Januar 2009)

Else_Eifrig schrieb:


> Was wäre denn das bit?


 
ich bezog mich auf merker bzw. die elemente des output-array


----------



## Else_Eifrig (22 Januar 2009)

Ich kapier das nicht. 

Ich will bei jeder Leitung überprüfen ob Stecker + und Kupplung + und Stecker - und Kupplung - einen Durchgang hat. Und das Stecker + und Kupplung - und Stecker - und Kupplung + keinen Durchgang haben. Und das soll für mehrere Leitungen nacheinander funktionieren, deswegen wollte ich eine Funktion erstellen, die ich dann bei z.B. 4 Leitungen 4 mal aufrufen kann. Wie gesagt, ich bin Anfänger. Kannst du mir das mal ausführlicher erklären? Zum Beispiel wie ich die Variablen definieren muss..


----------



## vierlagig (22 Januar 2009)

irgendwie reden wir doch an einander vorbei... :???:

und das prob ist, dass ich keine software für mutsibishi zur verfügung habe ...

also: du hast vier eingangs-bit, richtig?
und du möchtest diese vier bit entsprechend deiner spezifikation verknüpfen und damit ein bestimmtes bitmuster ausgeben? das geht, soweit ich mir das jetzt erstmal vorstellen kann nur auf ein eindimensionales array, die einzelnen arrays müssteste dann noch zusammen kopieren ...

sind grundsätzlich die bitmuster 0000 über 1010 bis 1111 vorstellbar oder ist im nibble immer nur ein bit zu erwarten ...

so richtig kann ich noch nicht nachvollziehen, wie die prüfung von statten gehen soll


----------



## Else_Eifrig (22 Januar 2009)

Also, Bitmuster und nibble sagt mir nichts. Das sollte ich erstmal nachlesen. Ich versuche nochmal meine Aufgabe zu erklären. Ich bin kein Elektriker oder Techniker. 

Es soll der Durchgang von Leitungen überprüft werden (genauer gesagt von Thermoelementen). Es soll so laufen, dass ich an meine Steuerung z.B. 2 oder 4 oder max. 16 Thermoelemente anschließe und dann soll überprüft werden, ob an den Steckern und Kupplungen die Leitungen richtig angeschlossen ist also + an + und - an -. 
Probeweise habe ich jetzt 2 Leitungen an die Steuerung dran geschraubt. 

Stecker von Leitung 1: Pluspol auf Eingang X1 und Minuspol auf Eingang X2.
Kupplung von Leitung 1: Pluspol auf Ausgang Y1 und Minuspol auf Ausgang Y2.

Stecker von Leitung 2: Pluspol auf Eingang X3 und Minuspol auf Eingang X4.
Kupplung von Leitung 2: Pluspol auf Ausgang Y3 und Minuspol auf Ausgang Y4.

Wenn ich jetzt Stecker und Kupplung der Leitungen zusammen stecke, dann soll überprüft werden ob die Teile richtig verbunden sind, also + auf + und – auf -.

Weil es später so sein soll, dass ich 16 Thermoelemente damit überprüfen will, wollte ich eine Funktion erstellen, die für jede Leitung aufgerufen werden kann. Vielleicht habe ich da auch ne falsche Denkweise. Bisher habe ich hauptsächlich Skripte mit Matlab und ein bisschen C++ programmiert. 

Wenn ich eine Leitung überprüfen will, klappt es auch mit meinem Programm, aber dann eben nur für die jeweiligen Ein- und Ausgänge, also so:

Y1 & X1 -> setze Merker[0] % Prüfung auf + +
-------------------------------------
Y1 & nicht X2-> setze Merker[1] % Prüfung auf + -
-------------------------------------
Y2 & X2 -> setze Merker[2] % Prüfung auf - - 
-------------------------------------
Y2 & nicht X1 -> setze Merker[3] % Prüfung auf - +

Dann bekomme ich Merker = [1 1 1 1] zurück, wenn nichts verpolt ist.

Wenn ich jetzt aber 16 Leitungen überprüfen will, sollte das aber so laufen, dass ich der Funktion die Nummer der aktuellen Leitung übergebe, also das i, und dann damit die jeweiligen Ein- und Ausgänge überprüft werden.


----------



## vierlagig (22 Januar 2009)

verstehe 

... jetzt bräuchten wir einen experten, der sagen kann ob die mitsubishi auch indirekte adressen kennt ... das was ich bisher da gesehen hab, war eher nicht soooo schön 

ein nibble ist ein block von vier bit, also dein array ... und das bitmuster ist die kombination aus 0 und 1, die in diesem nibble gespeichert ist ... dein nibble "GUT" ist 1111 ... das nibble "total mies" wäre 0000 (glaub ich)


----------



## Else_Eifrig (22 Januar 2009)

Ja, genau! 

Gibts hier solche Experten im Forum? Ansonsten schlage ich so lange mal indirekte Adressen nach und hoffe, dass ich fündig werde.


----------



## vierlagig (22 Januar 2009)

Else_Eifrig schrieb:


> Ja, genau!
> 
> Gibts hier solche Experten im Forum? Ansonsten schlage ich so lange mal indirekte Adressen nach und hoffe, dass ich fündig werde.


 
mutsibishi ist hier im forum eher der außenseiter ... ich hatte grad versucht zu googlen, aber hab nichts gefunden...

eine andere möglichkeit wäre, dass du die schnittstelle vier byte breit machst...und den baustein 16mal aufrufst...


----------



## Else_Eifrig (22 Januar 2009)

vierlagig schrieb:


> eine andere möglichkeit wäre, dass du die schnittstelle vier byte breit machst...und den baustein 16mal aufrufst...


 
Und wie mache ich das?


----------



## vierlagig (22 Januar 2009)

ich mein natürlich vier bit  sorry ... die vier bit, die du auswertest, also deine X'e und Y's ... warum operierst du hier eigentlich mit ausgängen?

so richtige wiederverwendbare subroutinen scheint die mutsibishi gar nicht zu kennen


----------



## vierlagig (22 Januar 2009)

hab mir grad mal das programmierhandbuch zu gemüte geführt und möchte dir mitteilen:

vergiss es!

bau die routine 16 mal mit den absoluten operanden - das erspart dir ne menge sucherei, die am ende zum selben vorgehen führt...


----------



## Else_Eifrig (22 Januar 2009)

Ja? Meinst du? Werd's dann wohl erstmal so machen. Falls dir oder einem Mitsubishi-Experten der das liest sonst noch was einfällt, wäre ich echt dankbar. 
Also dann, vielen Dank für die Hilfe und deine Geduld


----------

