# Warum immer Komponenten der Automatisierungsindustrie?



## drfunfrock (21 Oktober 2008)

Ich habe hier einen End-Of-Line-Test mit einer kleinen Beckhoff SPS aufgebaut. Aufgabe: Messe 3 Ströme (Bereich 100mA, Genauigkeit besser als 0.02mA) und eine Spannung (Bereich 300V, Genauigkeit besser als 0.1V) . 

Ich habe das mit dem Butter-und-Brot-Messinstrument von Agilent 34401 und einer Spannungsversorgung von Xantrex XTR (0-600V) gelöst. Beide Instrument mussten über RS232 gesteuert werden, weil GPIB nicht zur Verfügung stand oder besser, GPIB scheint es auch nicht zu geben. 

Die Signale werden zum Messen über 24V-Relais geroutet und es funkt wunderbar. Das Messinstrument verfügt jedenfalls über eine Genauigkeit, die mehr als genügend ist.


----------



## Question_mark (21 Oktober 2008)

*Verstehe ich nicht ..*

Hallo,



			
				drfunrock schrieb:
			
		

> Warum immer Komponenten der Automatisierungsindustrie?





			
				drfunrock schrieb:
			
		

> mit einer kleinen Beckhoff SPS aufgebaut.



Sag mal, ist eine Beckhoff SPS keine Komponente  der Automatisierungsindustrie ? Oder willst Du uns jetzt sagen, dass ein Agilent 34401 eine SPS ersetzen kann ? Irgendwie werde ich aus Deinem Posting nicht schlau ...

Gruß

Question_mark


----------



## Friedrich-Alexander (22 Oktober 2008)

*Prima Idee!*

Hi drfunfrock,

das ist eine Prima Idee, ich habe darüber auch nachgedacht, aber immer die Programmierung der RS232 gescheut. man könnte ja sogar die beiden "bordeigenen" RS232 des BX9000 verwenden.
Könnte ich Deine Lösung mal sehen?

Gruß FA


----------



## Cerberus (23 Oktober 2008)

*Häääääääääääääää????*

@ FA und drfunfrock

Was habt ihr denn vor??? Ich versteh immer noch euer Anliegen nicht!

Gruß Cerb


----------



## Friedrich-Alexander (23 Oktober 2008)

Hi Cerberus,

ich will, Labormessgeräte mit an die SPS-Steuerung anbinden. 
Bei Prüfständen und Versuchsanlagen gibt es Messungen, wo normale
SPS-Analogeingänge überfordert sind.
Solche Messgeräte können eventuell auch schon eine Signalvorverarbeitung
extern durchführen (z.B. Spitzenwertermittlung schneller Signale, Fourieranalyse...). 
Diese Messgeräte liefern ja oft mehrere Analogwerte, die man einzeln
einlesen müsste. 
Über Schnittstellenanbindung können die sowieso schon
digitalisierten Signale ohne weitere Fehler in die SPS eingelesen werden und
zusammen mit den anderen SPS-Daten in ein Messdatenfile geschrieben werden.

Gruß FA


----------



## Cerberus (23 Oktober 2008)

Hi FA

Und diese Messgeräte wollt ihr über RS232 anbinden?? Dafür gäbe es auch noch die Klemmen KL6001 oder KL6031 für einen K-Bus-Koppler von Beckhoff oder für ein EtherCAT-System die Entsprechungen EL6001 oder ES6001.

Genauere Information findest du dazu unter www.beckhoff.de

Gruß Cerb


----------



## Larry Laffer (23 Oktober 2008)

Hallo,



Friedrich-Alexander schrieb:


> Bei Prüfständen und Versuchsanlagen gibt es Messungen, wo normale
> SPS-Analogeingänge überfordert sind.


 
den Fall hatte ich nocht nicht ...



Friedrich-Alexander schrieb:


> Solche Messgeräte können eventuell auch schon eine Signalvorverarbeitung
> extern durchführen (z.B. Spitzenwertermittlung schneller Signale, Fourieranalyse...).


 
das kann die SPS auch alles sehr schön machen ... vor allen Dingen kann man es in der SPS dann so machen, wie man es haben will und nicht so, wie man es vorgesetzt bekommt.

Gruß
LL


----------



## Cerberus (23 Oktober 2008)

Larry Laffer schrieb:


> ... vor allen Dingen kann man es in der SPS dann so machen, wie man es haben will und nicht so, wie man es vorgesetzt bekommt.


 
Manchmal kommt es bestimmt auch vor, dass schon alles so passt wie man es haben möchte. Dann muss man nichts eigenes mehr schreiben.


----------



## ron (23 Oktober 2008)

Hi,

gibt auch Busumsetzer z.B. von Anybus, da kann man dann das RS232 auf den Profibus oder was man immer auch haben will umsetzen.
Funktioniert auch sehr gut 
Gruß

Ron


----------



## drfunfrock (23 Oktober 2008)

Friedrich-Alexander schrieb:


> Hi drfunfrock,
> 
> das ist eine Prima Idee, ich habe darüber auch nachgedacht, aber immer die Programmierung der RS232 gescheut. man könnte ja sogar die beiden "bordeigenen" RS232 des BX9000 verwenden.
> Könnte ich Deine Lösung mal sehen?
> ...



Abschnitt 1 Background Thread: 


```
PROGRAM FastBackground
VAR
    rs232_1                : SerialLineControl;
    error1                : BOOL;
    id1                        : ComError_t;
    rs232_2                : SerialLineControl;
    error2                : BOOL;
    id2                        : ComError_t;

    rs232_init1     :    KL6configuration;
    rs232_init2     :    KL6configuration;
    ready1     : BOOL;
    ready2    : BOOL;
    busy1     : BOOL;
    busy2        : BOOL;
END_VAR

IF (NOT ready1) OR (NOT ready2) OR busy1 OR busy2 THEN
    rs232_init1 (
        Execute := TRUE,
        Mode := SERIALLINEMODE_KL6_3B_ALTERNATIVE,
        Baudrate := 9600,
        NoDatabits := 8,
        Parity := PARITY_NONE,
        Stopbits := 1,
        Handshake := HANDSHAKE_NONE,
        ContinousMode := FALSE,
        pComIn := ADR(ST02_RS232InData1),
        pComOut := ADR(ST02_RS232OutData1),
        SizeComIn := SIZEOF(ST02_RS232InData1),
        Done => ready1,
        Busy => busy1,
        Error => error1,
        ErrorId => id1
    );

    rs232_init2 (
        Execute := TRUE,
        Mode := SERIALLINEMODE_KL6_3B_ALTERNATIVE,
        Baudrate := 9600,
        NoDatabits := 8,
        Parity := PARITY_NONE,
        Stopbits := 1,
        Handshake := HANDSHAKE_NONE,
        ContinousMode := FALSE,
        pComIn := ADR(ST02_RS232InData2),
        pComOut := ADR(ST02_RS232OutData2),
        SizeComIn := SIZEOF(ST02_RS232InData2),
        Done => ready2,
        Busy => busy2,
        Error => error2,
        ErrorId => id2
    );
ELSE
    rs232_1 (
        Mode := SERIALLINEMODE_KL6_3B_ALTERNATIVE,
        pComIn := ADR(ST02_RS232InData1),
        pComOut := ADR(ST02_RS232OutData1),
        SizeComIn := SIZEOF(ST02_RS232InData1),
        TXBuffer := ST02_TxBuffer1,
        RXBuffer := ST02_RxBuffer1,
        Error => error1,
        ErrorID => id1
    );

    rs232_2 (
        Mode := SERIALLINEMODE_KL6_3B_ALTERNATIVE,
        pComIn := ADR(ST02_RS232InData2),
        pComOut := ADR(ST02_RS232OutData2),
        SizeComIn := SIZEOF(ST02_RS232InData2),
        TXBuffer := ST02_TxBuffer2,
        RXBuffer := ST02_RxBuffer2,
        Error => error2,
        ErrorID => id2
    );
END_IF
```


Abschnitt 2 FB CMD senden: 


```
FUNCTION_BLOCK FB_SendCMD
VAR_INPUT
    start : BOOL;
    cmd : STRING;
    pt : TIME;
    com : UINT := 1;
END_VAR
VAR_OUTPUT
    ready : BOOL;
END_VAR
VAR
    Send : SendString;
    t : TON;
    flag : R_TRIG;
    state : UINT;
    bt : BOOL;
END_VAR

t(PT:=pt,IN:=(state=1));
flag(CLK:=start);

CASE state OF
    0:
        IF flag.Q THEN
            ready := FALSE;
            IF com=1 THEN
                Send(    SendString:= CONCAT(cmd,'$0D$0A'),
                        TXbuffer:= ST02_TxBuffer1);
            ELSE
                Send(    SendString:= CONCAT(cmd,'$0D$0A'),
                        TXbuffer:= ST02_TxBuffer2);
            END_IF
            state := 1;
        END_IF

    1:
        IF t.Q THEN
            ready := TRUE;
            state := 0;
        END_IF
END_CASE
```


Abschnitt 3 FB Empfangen von AG34401A: 


```
VAR_INPUT
    start : BOOL;
END_VAR
VAR_OUTPUT
    out : REAL;

    ready : BOOL;
END_VAR
VAR
    Receive: ReceiveString;
    ReceivedString: STRING;
    LastReceivedString: STRING;
    StringReceived: BOOL;
    ReceiveBusy: BOOL;
    l : INT;

    state : UINT;
    flag : R_TRIG;
  rflag : R_TRIG;
END_VAR

flag(CLK:=start);

ready := StringReceived;
rflag(CLK:=Receive.StringReceived);

CASE state OF
    0:
        ready := TRUE;
        IF flag.Q THEN
            ready := FALSE;
            state := 1;
        END_IF;

    1:
        Receive(
            Prefix:= '',
            Suffix:= '$0D$0A',
            Timeout:= T#0s,
            ReceivedString:= ReceivedString,
            RXbuffer:= ST02_RxBuffer1,
            StringReceived=> StringReceived,
            Busy=> ReceiveBusy
        );
     IF rflag.Q THEN
            L := LEN(ReceivedString);
            l := SEL(L>2,4,L);
            Out := STRING_TO_REAL(LEFT(ReceivedString,l-2));
            state := 0;
        END_IF;

END_CASE;
```


Abschnitt 4 Bsp (Codestücke): 

```
S2_PU1:
        (* Init Instruments *)
        (* 34401A *)
        Send(start:=TRUE,CMD:='SYST:REM',PT:=T#400ms,COM:=1);
        IF Send.ready THEN
            Send(start:=FALSE);
            state := S2_PU1A;
        END_IF

    S2_PU1A:
        state := S2_PU1B;

    S2_PU1B:
        Send(start:=TRUE,CMD:='*CLS',PT:=T#400ms,COM:=1);
        IF Send.ready THEN
            Send(start:=FALSE);
            state := S2_PU2;
        END_IF

    S2_07:
        (* Meas curr *)
        Send(PT:=T#50ms, CMD := 'MEAS:CURR:DC? 0.1,0.00001', COM:=1, start := TRUE);
        IF Send.ready THEN
            Send(start:=FALSE);
            state := S2_07a;
        END_IF

    S2_07a:
        rec(start:=TRUE);
        IF rec.ready THEN
            rec(Start:=FALSE);
            I3 := rec.out;
            IF ABS(I3-I2)>=0.001 THEN
                state := S2_FAILED;
            ELSE
                state := S2_08;
            END_IF;
        END_IF
```


----------



## drfunfrock (23 Oktober 2008)

Larry Laffer schrieb:


> das kann die SPS auch alles sehr schön machen ... vor allen Dingen kann man es in der SPS dann so machen, wie man es haben will und nicht so, wie man es vorgesetzt bekommt.
> 
> Gruß
> LL



Ja. Aber der Preis so eines Instruments ist nicht nur günstig, sondern es kann Spannungen und Stöme auf etwa 6 Dezimalstellen genau messen, weil eben das DualSlope-AD-Verfahren eingesetzt wird. Zudem kann ich damit auch alles machen, wass ich will. Der Messbereich bis zu 1000V ist auch nicht überall zu finden und darauf kam es hier auch an. 

Bei doppelten Preis gibts auch Instrumente, die mit TCP/IP angesteuert werden können. Diesen Luxus wollte mir mein Chef aber nicht gönnen.


----------



## drfunfrock (23 Oktober 2008)

Friedrich-Alexander schrieb:


> Hi Cerberus,
> 
> ich will, Labormessgeräte mit an die SPS-Steuerung anbinden.
> Bei Prüfständen und Versuchsanlagen gibt es Messungen, wo normale
> ...



Nimm lieber Instrumente mit TCP/IP. Hier gab es aber das Budget nicht her. Du bist auch besser bedient mit Labview, wenn du viele Instrumente hast. Die Kopplung zur SPS kann man über 5V-IO machen oder per TCP/IP. Letzteres habe ich so schon gemacht. Wir setzen hier auf PXI-Systeme, zu denen es auch 5V-IO-Karten gibt. Da ich aber meinen Job wechsel, komme ich leider nicht mehr zu einer Anlage, wo ich Labview und Twincat per TCP/IP kopple.


----------



## Mr.Spok (23 Oktober 2008)

Ich betreibe Laserabstandsmesssensoren mit einem Messbereich von 100mm mit einer Auflösung von 0,002mm. Den Meßwert lese ich auch über RS232 des Sensors aus. Der Sensor hat zwar auch einen 4-20mA-Ausgang aber das bringt, denke ich noch zusäztliche Ungenauigkeiten mit sich.

mfG Jan


----------



## drfunfrock (23 Oktober 2008)

Mr.Spok schrieb:


> Ich betreibe Laserabstandsmesssensoren mit einem Messbereich von 100mm mit einer Auflösung von 0,002mm. Den Meßwert lese ich auch über RS232 des Sensors aus. Der Sensor hat zwar auch einen 4-20mA-Ausgang aber das bringt, denke ich noch zusäztliche Ungenauigkeiten mit sich.
> 
> mfG Jan



Ich würde den Sensor auch direkt auslesen, weil die Strom-Messung eben Genauigkeit kostet, wenn man es denn braucht. Trotzdem, bei so einer billigen CX9010 kosten die beiden KL6001 ca. 30% der CPU-Zeit. Mehr als 3 RS232 geht wohl nicht. Die E-Bus Klemmen standen vor 2 Monaten noch nicht zur Verfügung. Nimm einen kleinen PC oder so etwas wie die CX1010.


----------



## Cerberus (23 Oktober 2008)

Also laut Beckhoff-Homepage stehen die EL-Klemmen zur Verfügung. Die ES-Klemmen werden voraussichtlich Ende des Jahres eingeführt. Würde mich allerdings nicht wundern wenn es nächstes Jahr wird, bis es soweit ist.


----------



## drfunfrock (23 Oktober 2008)

Cerberus schrieb:


> Also laut Beckhoff-Homepage stehen die EL-Klemmen zur Verfügung. Die ES-Klemmen werden voraussichtlich Ende des Jahres eingeführt. Würde mich allerdings nicht wundern wenn es nächstes Jahr wird, bis es soweit ist.



Ich schrieb ja auch VOR 2 MONATEN  Ich bin aber noch skeptisch, was den Ressourcenverbrauch angeht, weil jedes zusätzliche Bussytem unverhältnismässig viel CPU kostet.  Die Profibusklemme hat uns an einem Pentium-D PC auch so um die 3%-5% gekostet.


----------



## Cerberus (23 Oktober 2008)

drfunfrock schrieb:


> Ich schrieb ja auch VOR 2 MONATEN


 
Also die EL-Klemmen sind auch schon länger verfügbar!! Ich habe schon Anfang des Jahres mit denen gearbeitet!!


----------



## drfunfrock (23 Oktober 2008)

Cerberus schrieb:


> Also die EL-Klemmen sind auch schon länger verfügbar!! Ich habe schon Anfang des Jahres mit denen gearbeitet!!



Unser Lieferant sagte nur, dass die EL6001 nicht verfügbar sind. Da habe ich dann zu einer E-Bus/K-Bus-Umsetzerklemme gegriffen. Allerdings sind die Schweden (Die sind auch Lieferanten für Norwegen) recht bräsig. Macht nix. Ich kam auch so klar.


----------



## Cerberus (23 Oktober 2008)

drfunfrock schrieb:


> Unser Lieferant sagte nur, dass die EL6001 nicht verfügbar sind. Da habe ich dann zu einer E-Bus/K-Bus-Umsetzerklemme gegriffen. Allerdings sind die Schweden (Die sind auch Lieferanten für Norwegen) recht bräsig. Macht nix. Ich kam auch so klar.


 
Ja kann natürlich sein, dass dein Lieferant die noch nicht im Sortiment hatte.


----------

