Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all 49250 articles
Browse latest View live

Windows Systemzeit mit NT_GetTime auslesen, TwinCat3

$
0
0
Hallo zusammen,

für mein Projekt nutze ich den Funktions Block ,,NT_GetTime", um die Windows (7) Systemzeit auszulesen und in eine Datei abzuspeichern.
Eine Datei erstellen und einen String abspeichern funktioniert.

Wenn ich nun versuche die Systemzeit mit dem NT_GetTime auszulesen und in ein TimeStruct zu schreiben, bleibt dieses TimeStruct leer (lediglich 0). Mir kommt es so vor, dass der NT_GetTime nicht mal aufgerufen wird, weil ich setze den Start auf True, dennoch bleibt der Ausgang Busy auf False.

Hat jmd. eine Idee warum das Programm den NT_GetTime nicht aufruft bzw. ob für das oben genannte System ein anderer Baustein verwenden muss oder diese Zeit Bausteine irg wie speziell instanziieren muss?

Code:

GetTIME                : NT_GetTime;
    systemTime          : TIMESTRUCT;
    bGetTimeStart        : BOOL;
    bGetTimeBusy        : BOOL;
    bGetTimeERR            : BOOL;
    bGetTimeERRID        : UDINT;

Code:

GetTIME(
    NETID:='',       
    Execute:= bGetTimeStart,
    TMOUT:= T#2S,
    BUSY=> bGetTimeBusy,           
    ERR=> bGetTimeERR,
    ERRID=> bGetTimeERRID,
    TIMESTR=> systemTime);

Danke :)

Step 7 wochen zeitschaltuhr

$
0
0
Hallo

Ich benötige eine Wochen Zeitschaltuhr in Step 7.
Der timer 2 aus der Oscat Bibliothek funktioniert irgendwie nicht so richtig.
Hat jemand eine andere Lösung ,
Oder schonmal programmiert ?
Vielleicht auch mit Programm Beispiel

Danke



Gesendet von iPhone mit Tapatalk

dämmerungssteuerung mit LOGO!

$
0
0
Hallo zusammen,
ich sitze gerade daran die Außenbeleuchtung bei uns Zuhause so zu schalten, dass sie ab einer Gewissen Dämmerung an geht.
Hierfür möchte ich die vorhandene LOGO! 8 benutzen
kann mir jmd einen Sensor hierfür Empfehlen bzw Vorschlagen, hab mit der Analogtechnik bisher leider noch nichts zu tun gehabt.
findet man dafür irgendwo ein Beispielprogramm

vielen Dank =)

mfg Jonas

Step 7 Frage zu Block Properties

$
0
0
Hallo,

ich arbeite zur Zeit an einem Step7 Project und möchte meinen Code vernünftig dokumentieren.
Es gibt Block Properties (Title, Author, Version,Name, Family)

Ich habe den Sinn der Properties Name und Family nicht verstanden. Ist Name die Bezeichnung des Symbols? Und was bedeutet Family? Wie muss man die beiden verwenden und in welchem Kontext?

Gruß

Carsten

Service-/Prüftechniker im Außendienst (m/w)

$
0
0
Die Lash + Lift Zurr- und Hebetechnik GmbH ist die Vertriebsgesellschaft der Unternehmen SpanSet GmbH & Co. KG
und RUD Ketten GmbH & Co. KG. Unsere Geschäftstätigkeit umfasst den Vertrieb von anspruchsvollen Produkten der
Hebe-, Zurr- und Höhensicherungstechnik sowie von ergänzenden Produkten anderer namhafter Hersteller. Unser
Serviceangebot umfasst darüber hinaus einen eigenen Reparatur- und Prüfservice sowie ein umfangreiches Seminar-
angebot.

Im Rahmen des Ausbaus des Prüf- und Reparaturservice an unserem Standort in Lübeck suchen wir zum nächst-
möglichen Zeitpunkt einen:

Service-/Prüftechniker im Außendienst (m/w)

Ihre Aufgabe:
  • Durchführung von wiederkehrenden Prüfungen von Anschlag- und Lastaufnahmemitteln entsprechend den
    berufsgenossenschaftlichen und gesetzlichen Vorschriften
  • Instandsetzung von Krananlagen, Hebezeugen und anderen Lastaufnahmemitteln
  • Beratung der Kunden vor Ort und Akquise von Nachfolge- bzw. Neuaufträgen
  • Erstellung der Prüfungsdokumentation
  • Termin- und Tourenplanung

Ihr Profil:
  • Abgeschlossene Berufsausbildung als Schlosser, Metallbauer, Elektriker, Mechatroniker oder in einem
    vergleichbaren Berufsbild mit entsprechender Zusatzqualifikation
  • Berufserfahrung in vergleichbarer Position
  • Gute mechanische und technische Kenntnisse
  • Kenntnisse in Word und Excel
  • Einsatzfreude und Flexibilität
  • Besitz des PKW-Führerscheins
  • Reisebereitschaft im regionalen Raum
  • Fähigkeit in Höhen zu arbeiten

Wir bieten:
  • Eine intensive Einarbeitung inklusive Produktschulungen
  • Eine kooperative und dynamische Arbeitsatmosphäre mit Gestaltungsspielräumen zur Erfüllung Ihrer
    Ziele und Entfaltung Ihrer Talente
  • Weiterbildungsmöglichkeiten für Ihre persönliche und berufliche Entwicklung
  • Attraktive Konditionen zur betrieblichen Altersversorgung
  • Eine leistungsgerechte Vergütung
  • Fühlen Sie sich angesprochen?

Ihre vollständigen Bewerbungsunterlagen mit Angabe Ihrer Gehaltsvorstellung richten Sie bitte an Herrn Lars Schulz.
(Tel. 0451/87996 75, E-Mail: luebeck@lashundlift.de)

Lash + Lift
Taschenmacherstraße 2
23556 Lübeck

Step 7 SCL - AT Befehl in einer STRUCT - ich verzweifle :(

$
0
0
Moin Moin

Ich habe ein Problem und mit der Hilfe kann ich leider nichts dazu finden. Mit SCL habe ich gerade angefangen und hänge leider ein bisschen an der Syntax, bei der Definition der statischen Variablen in einer Struktur.

Ich möchte innerhalb einer Struktur ein ARRAY OF CHAR weiter mit dem AT Befehl aufteilen.

Wenn ich es so anlege, bekomme ich immer einen Fehler das die Datentypspezifikation nicht korrekt ist.

Code:

CONST                              // konstanten
    UserBereich  := 64;
END_CONST
VAR_TEMP                            // temporäre Variablen
    StatusLesen                        :INT; 
    StatusSchreiben                    :INT;
    StatusKopieren                      :INT;
    ScannerReady                        :BOOL;   
    forSchleifeCharToString            :INT;
    stringChar                          :STRING[1];
END_VAR
VAR                                // statische Variablen   
    AdresseHW                              :ARRAY[1..16] OF WORD;
    Scanner                                :STRUCT
        In                                  :STRUCT
            Handshake                      :STRUCT
                Error                      :BOOL;
                ResultDataAvailable        :BOOL;
                ResultDataStrobe            :BOOL;
                Bit3                        :BOOL;
                Bit4                        :BOOL;
                Bit5                        :BOOL;
                BufferOverflow              :BOOL;
                GeneralError                :BOOL;
                END_STRUCT;
            Completion                      :STRUCT
                ReadComplete                :BOOL;
                Bit1                        :BOOL;
                Bit2                        :BOOL;
                Bit3                        :BOOL;
                Bit4                        :BOOL;
                Bit5                        :BOOL;
                Bit6                        :BOOL;
                Bit7                        :BOOL;
                END_STRUCT;
            Terminal                        :STRUCT
                Bit0                        :BOOL;
                Bit1                        :BOOL;
                Bit2                        :BOOL;
                Bit3                        :BOOL;
                OUT1Status                  :BOOL;
                OUT2Status                  :BOOL;
                OUT3Status                  :BOOL;
                Bit7                        :BOOL;
                END_STRUCT;
            OperationResult                :ARRAY[1..20] OF BYTE;
            ResultDataReadyCount            :WORD;
            ResultDataUpdateCount          :WORD;
            ReserveWord                    :WORD;
            ResultDataSize                  :WORD;
            ResultDataIN                    :ARRAY[1..UserBereich] OF CHAR;
                ResultData: AT ResultDataIN :STRUCT
                    Data01                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data02                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data03                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data04                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data05                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data06                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data07                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data08                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data09                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data10                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data11                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data12                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data13                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data14                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data15                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    Data16                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
                    END_STRUCT;
        END_STRUCT;
        Out                                :STRUCT
            ErrorClear                      :STRUCT
                Bit0                        :BOOL;
                ResultDataLatch            :BOOL;
                Bit2                        :BOOL;
                Bit3                        :BOOL;
                Bit4                        :BOOL;
                Bit5                        :BOOL;
                Bit6                        :BOOL;
                Clear                      :BOOL;
                END_STRUCT;
            CompletionClear                :STRUCT
                ReadCompleteClear          :BOOL;
                Bit1                        :BOOL;
                Bit2                        :BOOL;
                Bit3                        :BOOL;
                Bit4                        :BOOL;
                Bit5                        :BOOL;
                Bit6                        :BOOL;
                Bit7                        :BOOL;
                END_STRUCT;
        END_STRUCT; 
    END_STRUCT;

Lege ich das ganze jedoch nicht in eine STRUCT funktioniert es einwandfrei.

Code:

tempResultDataIN                    :ARRAY[1..UserBereich] OF CHAR;
        ResultData AT tempResultDataIN  :STRUCT
            Data01                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data02                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data03                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data04                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data05                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data06                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data07                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data08                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data09                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data10                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data11                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data12                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data13                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data14                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data15                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            Data16                      :ARRAY[1..(UserBereich / 16)] OF CHAR;
            END_STRUCT;

Ich würde gerne wissen was ich falsch mache oder ob das generell gar nicht geht. Danke vorab schonmal.

Grüße

Step 7 (Step7 Micro/Win) Kommunikation zwischen 2x S7-200 über 2 Ethernet-Module CP243

$
0
0
Guten Tag zusammen,
ich bräuchte etwas Hilfe bei der Einrichtung einer Netzwerkkommunikation zwischen:
2x Siemens S7-200 (CPU 222 DC/DC/DC – 212-1AB23-0XBO) und
2x CP243-1 Ethernet CP (6GK7 243-1EX01-0XE0).
Ich möchte erst einmal zum Testen der Netzwerkverbindung das ein paar Eingänge vom Server beim Client ein paar Ausgänge schalten. Zum Beispiel das was ich am Server mit EB0 einlese soll am Client an AB0 ausgegeben werden.
Ich bekomme aber auch nach etlichen Stunden keine Kommunikation hin. Ich vermute das es nur eine Konfigurationssache ist. Dort mache ich bestimmt einen Fehler.
Vielleicht kann mir jemand dabei behilflich sein.

Das wäre super.

Viele Grüße
Maltitol


Die SPSen habe ich wie folgt konfigurieren

Konfigurieren des Servers:
Neues Projekt ->
1. Ethernet Assistenten starten.
2. Modulposition angeben. -> Position 0 CP243-1 Internet
3. Modul ausgewählt: CP243-1 (6GK7 243-1EX01-0XE0)
4. Moduladresse: IP-Adresse automatisch über DHCP beziehen.
5. Befehlsbyte des Moduls: AB 1 (nicht veränderbar).
- Punkt zu Punktverbindung -> Eine Verbindung.
6. Verbindungen konfigurieren:
- Dies ist eine Server-Verbindung ausgewählt.
- Server TSAP 10.00 (nicht veränderbar).
- Alle Verbindungsanforderungen annehmen ausgewählt.
- Client TSAP 10.00
7. CRC Schutz und Keep-Alive-Intervall 30s aktiviert.
8. Speicher für die Konfiguration zuweisen:
- Vorgeschlagene Adresse VB0 bis VB158
9. Fertigstellen – Name ETH-Konfiguration für 0

OB1 der Server SPS
OB1 des Servers.png

Konfigurieren des Clients:
Neues Projekt ->
1. Ethernet Assistenten starten.
2. Modulposition angeben. -> Position 0 CP243-1 Internet
3. Modul ausgewählt: CP243-1 (6GK7 243-1EX01-0XE0)
4. Moduladresse: IP-Adresse automatisch über DHCP beziehen.
5. Befehlsbyte des Moduls: AB 1 (nicht veränderbar).
- Punkt zu Punktverbindung -> Eine Verbindung.
6. Verbindungen konfigurieren:
- Dies ist eine Client-Verbindung ausgewählt.
- Lokale Einstellungen (Client)
- TSAP 10.00 (nicht veränderbar).
7. Datenübertragung CPU zu CPU einrichten:
- Neue Datenübertragung.
Diese Datenübertragung dient dazu:
- Daten über die Verbindung vom entfernten Server zu lesen. (ausgewählt).
- 1 Datenbyte vom Server lesen
Datenspeichern im lokalen Zielsystem von VB0 bis VB0
Daten vom Server lesen von VB0 bis VB0
Symbolischer Name im Projekt: PeerMessage00_1
Fertig.
8. Entfernte Einstellungen Server.
TSAP 10.00
- IP Adresse des Server Netzwerk Modul eingetragen. (ich kann das Modul auch mit der eingetragenen IP Adresse anpingen.
Symbolischer Name für die Clientverbindung: Connection0_0

7. CRC Schutz und Keep-Alive-Intervall 30s aktiviert.
8. Speicher für die Konfiguration zuweisen:
- Vorgeschlagene Adresse VB5 bis VB179
9. Fertigstellen – Name ETH-Konfiguration für 0

OB1 der Client SPS:
OB1 des Clients.jpg

Symboltabelle im Client:
Symboltabelle des Clients.png
Angehängte Grafiken

TIA Mehr Eingänge forcen

$
0
0
Guten Tag,

habe 10 Eingänge "geforced", da mir die Hardware noch fehlt.

Jetzt sagt TIA, dass man die maximale Anzahl an den zu forcenden Variablen erreicht hat.

Gibt es eine Möglichkeit dennoch mehr Eingänge zu forcen?


Ich muss noch ca. 50 Eingänge für die Hardware (Hilfsschalter, Schalter, diverse Rückmeldungen von Bausteinen...), welche noch nicht da ist, programmieren.
Ich habe mir erst überlegt Merker als quasi-Eingänge zu benutzen und diese dann in das Programm einpflegen. Aber wenn die Hardware dann da ist, muss man die
Adresse der Merker jedesmal ändern.

Dann habe ich mir überlegt die Eingänge zu forcen. Aber ab 10 ist scheinbar schluss.

Nun gibt es noch eine Möglichkeit: Eingänge auf feste Potentiale zu verdrahten und wenn die Hardware da ist, einfach die Hardware anschließen.
Der Nachteil hierbei ist, dass man die Pegel der Eingänge schwer ändern kann und das Programm zu testen.

Frage: Was macht Ihr, wenn euch die Hardware fehlt und das Programm trotzdem erstellt werden muss. Vervendet Ihr Merker als Ersatz für Ein/Ausgänge?

TC3.1 OPC-UA Methoden Node

$
0
0
Hallo,

ich würde gerne mit einer Beckhoff PLC (TwinCat 3.1) eine Methode in der OPC-UA Struktur freigeben.

Hierzu habe ich versucht dieser Anleitung zu folgen.

Leider wird die Funktion M_SUM aber bei mir nicht im UA Namensraum veröffentlicht.
Variablen zu veröffentlichen funktioniert hingegen ohne Probleme.

Hat jemand schon mal erfolgreich eine Methode im OPC-UA namensraum mit TwinCat 3.1 und TF-6100 "veröffentlicht"?

Danke und Grüße
Kiwi

Step 7 Pointer variabler Operand

$
0
0
Moin zusammen,
ich möchte 12 Char Werte in zwei Statische Strings verschieben. Der DB und die Adresse innerhalb des DB sind allerdings variabel und werden als Integer am Baustein parametriert.
Den DB rufe ich ganz oben im FB auf. Nur bekomme ich das mit den Adressen nicht hin. Kann mir da jemand weiter helfen?

Ich habe auch schon überlegt die 12 Char werte in 3 Doppelwörtern zu transferieren. Daraus habe ich aber dann auch keine Strings bekommen. Das "zweite" Doppelwort müsste ich ja irgendwie teilen.


Viele Grüße
BlackDice

TIA Loopback zwischen Panels mit SmartAccess verhindern?

$
0
0
Hallo zusammen,
ich habe gerade folgende Herausforderung, bei der ich hoffe, dass der eine oder andere von Euch das Problem vielleicht auch schon hatte und einen Trick kennt, dies zu lösen:

Wir haben eine grössere Anlage, welche über 3 SPSen und 3 Comfort Panels verfügt. Auf jedem Panel läuft die Visualisierung der eigenen SPS. Der Kunde wünscht nun mittels SmartAccess und SmartServer, dass von jedem Panel aus auf jedes andere zugegriffen werden kann.

Wenn ich dies realisiere, dann kann ich auf mit Panel 2 auf Panel 1 zugreifen. Allerdings ist auf Panel 1 ebenfalls die Auswahl verfügbar, auf Panel 2 zuzugreifen. Wenn ich nun mittels SmartAccess von Panel 2 auf 1 zugreife und dort den Knopf drücke, auf Panel 2 zuzugreifen, führt dies zu einem Loop, welcher die beiden Panels zum Absturz führt.

Kennt jemand von Euch einen Trick, wie ich die Buttons ausblende, das Drücken ignoriere oder eine Seite sperre, wenn jemand remote auf das Panel zugreift? Oder gibt es sonst eine Lösung?

Vielen Dank für Eure Mühe.

TIA PC WLAN Simatic

$
0
0
Hallo,

Ich suche zumindest mal einen Lösungsansatz für folgendes Problem:

Über einen portablen Code-Reader mit Windows Mobile Betriebssystem wird ein Code gelesen und der Code-Inhalt in ein Textfile geschrieben. Der Code-Reader hat integriertes WLAN.
Nun möchte ich den Inhalt des Textfiles Simatic-seitig (S7, TIA) in einem Datenbaustein zur weiteren Verarbeitung abbilden.

Das Hauptproblem sehe ich software- bzw. treiberseitig auf dem WindowsMobile PC, wo ja ein Textfile ausgelesen und dessen Inhalt über WLAN an die SPS übertragen werden muss.
...und SPS-seitig natürlich die Funktionalität, den empfangegen Textstring zur in einem DB abzubilden.

Gibt es da evtl. fertige Lösungen oder wird das eine große Baustelle?

Gruß

Sonstiges WinCC Runtime V7

$
0
0
Hallo Leute,

Ich benutze Runtime V7 für die Fernwartung und meine Aufgabe jetzt die Auswertung von Energiezähler aus der Kunden-Server. Nachdem ich die Verbindung auf den Server gemacht habe und die Kurven geguckt, habe ich folgenden Problemen:

Erstens kann ich den Verlauf NUR von 22.08.2016 bis 16.09.2016 sehen. Vorher und Nachher nichts. Und dann ab 10.10.2016 habe wieder normaler Kurven. Ich habe Backup verbinden (Einstellungen) für das ganze Jahr 2016 gemacht aber trotzdem kriege ich nichts, außer diese oben genannter Zeitraum..

Zweitens werden die Kurve täglich gelöscht (Bilder). Am Montag war es von 22.08 bis 16.09 und Dienstag von 23.08 bis 16.09 usw..
Wahrscheinlich muss ich etwas einstellen, was ich nicht zurechtkomme.
Ich bedanke mich bei Ihnen im Voraus für Eure Hilfe.

Mit freundlichen Grüßen.
Ihre hectahexe:cool::cool::cool:.

SPS-Analyzer ohne Dongle

$
0
0
Hallo,

kennt jemand einen SPS-Analyzer der ohne Dongle funktioniert?
Ich mag Dongles grundsätzlich nicht und finde diese in diesem Fall beim mobilen Einsatz völlig impraktikabel.

Wir brauchen so eine SW vielleicht 10x im Jahr.
Diese muss deshalb auf eine VM die auch auf mehreren Rechnern läuft.
Eine gleichzeitige Nutzung findet natürlich nicht statt.
Ich kann und will es aber logistisch nicht bewerkstelligen dass genau der User der dieses Ding braucht einen Dongle dabei hat...
Meinetwegen kann das Ding einen Kopierschutz haben der nach Hause telefoniert.
Dann wäre der "Dongle" quasi in der Cloud.
Aber ein vergess- und verlierbarer Hardwaredongle ist inakzeptabel.

Danke!

Wago Parametrierung Codesys 2.3 und Dali Konfigurator

$
0
0
Hallo,

ich habe ein paar offenen Fragen zu der Parametrierung unter codesys 2.3 und dem Wago Dali Konfigurator.

Was habe ich bis jetzt gemacht.

- Ein EVG an die 753 647 und mit dem Dali Konfigurator konfiguriert, exportiert und in mein Projekt in Codesys importiert.
- Den FB Master seperat in einem PRG aufgerufen; Adressen eingetragen und Bootprojekt erzeugt.
- Dali Karte geht nach booten jetzt in den Fullmodus
- FB DaliDIMM Double Bottun eingefügt und beschaltet, läuft auch.
- Video zum Dali- Konfigurator angeschaut.


Was ich nicht verstehe, wie ändere ich die internen Parameter z.B. vom FB DaliDIMM Double Bottun?7

Ich finde die nur wenn ich online bin und dann kann ich sie ändern, aber nach dem nächsten booten, sind die Werte wieder default,
wie stelle ich das ein?

Im Dali Konfigurator Video ist der Eingang typConfig Dimmer beschalten, wie mache ich das?

Siehe Screenshots, da ist mein aktuelles Projekt.

Vielen Dank.


Gruß
Angehängte Grafiken

TIA PC-Schnittstelle nicht sichtbar

$
0
0
Hallo,
TIA V13SP1
Unter "Erreichbare Teilnehmer" wird im TIA die Ethernetschnittstelle im Dialogfenster nicht mehr angezeigt.
Über die klassische PG/PC-Schnittstellen-Software kann ich die PC-Ethernetschnittstelle (RealTech Fast Ethernet) einstellen, dies hat jedoch keinen Einfluss auf TIA.
Die PC-Schnittstelle ist ok, da ich über diese ins Intranet komme.
Woran kann dies liegen?

Grüße
Felix

Step 7 MQTT - IoT und Machine2Machine Kommunikation für Siemens S7

$
0
0
Hallo,


ich möchte Euch ein Projekt vorstellen, an dem ich, mein Kollege Christof und Roan Brandt aus Südafrika seit einigen Monaten arbeiten.
Wir haben in den letzten Monaten das Protokoll Message Queue Telemetry Transport (MQTT) für Siemens S7 als Step7 Projekt programmiert.


Über MQTT
MQTT ist ein Publish-Subscriber Protokoll, das bei "Internet of Things" (IoT) Projekten als Standardprotokoll verwendet wird. Es wird von allen großen Cloud Anbietern mit IoT Diensten wie Amazon AWS oder auch Microsoft Azure direkt unterstützt.


MQTT hat einige interessante Eigenschaften. Wie bereits erwähnt basiert es auf dem Publish-Subscriber Muster. Sendende Systeme, die Publisher genannt werden, übermitteln Nachrichten an Nachrichtenverteiler, die Broker genannt werden.
Systeme, die sich für bestimmte Typen von Nachrichten interessieren, können diese beim Broker abonnieren. Diese Systeme nennt man deswegen Subscriber.


Publisher, Subscriber und Topics
Nachrichten enthalten Topics, diese sind eine Mischung aus Nachrichtenüberschrift und hierarchischen Nachrichtentypen. Anhand der Topics können MQTT Nachrichten gefiltert werden.
Ein Topic könnte z.B. "test" lauten. Subscriber, die das Topic "test" abonniert haben, erhalten sämtliche Nachrichten mit dem topic "test", die von Publisher versendet werden, aber keine Nachrichten mit anders lautendem Topic.
Ein Subscriber kann übrigens mehrere Topics gleichzeitig abonnieren. Natürlich können Abos für Topics mittels Unsubscribe auch wieder gelöst werden.


Topic-Hierarchien und Filter
Topics können mittels "/"-Zeichen aber auch Hierarchien abbilden. Z.B. könnte es ein Topic Haus/Küche/Temperatur und ein weiteres Topic Haus/Küche/Luftfeuchtigkeit geben.
Ein Subscriber, der das Topic Haus/Küche/Temperatur abonniert hat, würde ab dann alle Nachrichten mit diesem Topic erhalten. Nachrichten dieses Topics können von einem Publisher System aber auch von mehreren versendet werden, solange diese das gleiche Topic verwenden bekommt der Subscriber alle Nachrichten.
Es gibt aber auch den Filter # für Topics, abonniert man diesen erhält man alle Nachrichten, egal welches Topic diese haben. Das + Zeichen ist ein Platzhalter für eine Hierarchieebene. Abonniert man z.B. /Haus/+/Temperatur, würde man alle Temperaturnachrichten aus allen Zimmern erhalten.


Quality of Service Level - Handshakes für Publisher
MQTT bietet aber noch einiges mehr. Das Protokoll definiert drei Quality of Service Modi.
Quality of Service 0 ist der "Fire and Forget" Modus. MQTT Nachrichten, die mit diesem QoS-Modi gesendet werden haben keinerlei Handshake, dass den Empfang beim Broker quittieren würde.
Sendet man eine Nachricht mit dem Quality of Service Level 1, dann wird ein einfacher Handshake aktiviert. Jeder Nachricht wird mit einer Quittierung seitens des Brokers bestätigt, die Quittierung erfolgt anhand einer Nachrichten-ID, die bei Emfpang durch den Broker zurückgemeldet wird.
Der Quality of Service Level 2 enthält einen doppelten Handshake, d.h. die Quittierung einer empfangenen Nachricht wird vom Publisher wiederum zum Broker Quittiert, der wiederum die Quittierung quittiert (ächz). Dies soll den doppelten Versand einer Nachricht erschweren (Duplicates).


Quality of Service Level - Nachrichtenpufferung für Subscriber
Beim Abonnieren können ebenfalls Quality of Service Level angefordert werden, diese haben dann aber eine etwas andere Funktion. Ein Subscriber, der Quality of Service beim Broker anfordert, bekommt nicht nur eine gesicherten Nachrichtenversand mit Handshake, der Broker fängt auch an Nachrichten von Topics, die der Suscriber abonniert hat, zu puffern, falls der Subscriber offline ist. Geht der Subscriber wieder online, bekommt er alle zwischenzeitlich eingegangen Nachrichten des Topics vom Broker zugeschickt.


Retained Messages - der letzte bleibt hängen
Aber auch der Publisher kann eine bestimmte Art der Nachrichtenpufferung beim Broker anfordern Sendet ein Publisher eine Nachricht mit gesetztem Retain Flag, dann puffert der Broker immer die letzte eingegangene Nachricht für deren Topic. Abonniert ein neuer Subscriber dieses Topic, erhält er sofort die letzte eingegangene Nachricht, auch wenn diese bereits vor dessen Abonement eingegangen war.


Connect - Funktion mit Mehrwert für Tote
Bevor Publisher oder Suscriber die Funktionen eines Broker nutzen können, müssen sie sich erst einmal mittels Connect beim Broker anmelden. Daraufhin wird im Broker eine Session für den Client erzeugt. Die Anmeldung kann dabei auch mit Benutzername und Kennwort abgesichert werden.
Interessant ist dabei die Möglichkeit des Clients eine Testamentsnachricht an den Broker zu übergeben. Dies ist eine normale MQTT Nachricht mit Topic, Daten und auch Retained Flag. Der Broker macht beim Connect mit dem Client eine Keepalive Zeit aus, in diesem Zeitraum muss der Client eine Nachricht verschicken oder ein MQTT-Ping zum Broker schicken, ansonsten nimmt der Broker an, das der Client tot (offline) ist. Genau in diesem Fall wird die Testamentsnachricht vom Broker verschickt, er handelt sozusagen als Notar im Auftrag des Clients. So eine Nachricht kann z.B. an das Topic "Offline-Client" mit dem Inhalt "Client 10 ist offline" lauten. Alle Systeme, die das Topic "Offline-Client" abonniert haben, erhalten darauf hin diese Nachricht. Somit werden interessierte Systeme vom "ableben" eines Clients benachrichtigt, ohne dass sie diesen überwachen müssten.


Leichtgewichtiges Protokoll für schwere Daten
MQTT ist ein sehr einfach gehaltenes Protokoll, dass trotz Einfachheit aber tolle Funktionen bietet. Ich meine : hey, wir haben es selber für S7 implementiert! Wer mich kennt weiss also: kann so kompliziert nicht sein ;-) Weiterhin kann MQTT bis zu 256MB an Daten befördern.


MQTT im Netzwerk - auch im Web zuhause
MQTT funktioniert standardmäßig über TCP/IP oder Websockets. Dank der Websockets-Untersützung können auch Browser-Clients mit Javascript direkt beim Broker Topics abonnieren und somit Daten in Echtzeit erhalten. Websockets sind Teil des HTML 5 Standards und auch Proxy-fähig, d.h. MQTT-Kommunikation kann über einen HTTP-Proxy weitergeleitet werden. Websockets-URL fangen mit ws:// oder wss:// an.


Broker
Broker sind die Nachrichtenvermittler in der MQTT-Infrastruktur. Broker erhalten Daten von Publishern, puffern diese auf Anforderung und liefern diese in Echtzeit an Subscriber aus.
Allerdings heisst das nicht, das alle Clients auf einen Broker angewiesen sind. Broker unterstützen so genanntes Bridging, d.h. mann kann auch Broker mit Broker verbinden und die Nachrichten von einem Broker zum nächsten übermitteln lassen. Somit können z.B. Broker für Standorte zuständig sein, aber die Standorte auch untereinander verbinden.
Weiterhin sorgen Broker auch für Sicherheit und Nachrichtenpufferung.
Broker gibt es viele, sie müssen nur das MQTT Protokoll (aktuell ist die MQTT-Protokollversion 3.1.1) unterstützen. Es gibt Open Source Produkte wie den Mosquitto Broker aber auch sehr gute kommerzielle Produkte wie z.B. HiveMQ mit Clustering-Fähigkeiten.


MQTT - der Ring der sie alle bindet
Aufgrund der Einfachheit des Protokolls gibt es MQTT-Bibliotheken für so ziemlich alles, was 0 und 1 unterscheiden kann. Unser Team hat es für S7 implementiert, es gibt MQTT aber auch für praktisch alle Programmiersprachen und auch für Systeme wie z.B. LabView.
Somit lassen sich innerhalb einer Industrieumgebung die unterschiedlichsten Systeme zusammenschalten, aber ebend auch aus der Industrieumgebung hinaus in die klassische IT-Welt bis "rauf" in die Cloud!
Nun ist MQTT aber auch kein IT-Exot der OASIS Standardisiert ist, sondern auch ein Protokoll mit ISO/IEC-Heiligsprechung (ISO/IEC 20922:2016).

Schaut selbst mal nach unter http://www.mqtt.org und http://www.iso.org/iso/catalogue_det...csnumber=69466


MQTT - wozu?
Ich habe Euch ja nun den Feature-Blumenstrauss von MQTT vorgestellt. Aber warum soll das jetzt besser sein oder als Alternative zu etablierten Standards wie z.B. OPC oder OPC-UA in Erwägung gezogen werden?
Zunächst einmal Entkoppelt MQTT Sender und Empfänger wunderbar voneinander. Sender könen Daten zum Broker senden und sind danach "fertig", einer oder viele Empfänger können diese Daten abonnieren, ohne dass der Sender überhaupt weiss, wer der oder die Clients sind. Bei OPC ist das ähnlich, aber MQTT funktioniert eben nicht nur im Industrial Engineering und der Hausautomation. Ausserdem is MQTT viel billiger, praktisch alles an MQTT ist Open Source bzw. frei erhältlich. Weiterhin wird MQTT von modernen IT-Diensten wie IoT verwendet.
MQTT kann jeder "sprechen", der LabView End-of-Line Tester, die Siemens-Steuerung, der Arduino Microcontroller oder der Raspberry Pi. Und natürlich alle PC-Anwendungen die MQTT unterstützen bzw. sämtliche Individualprojekte - einfach MQTT Bibliothek einbinden und die Kommunikation ist in 10 Zeilen fertig programmiert.
MQTT ersetzt natürlich die etablierten Standards nicht, es kann es aber in bestimmten Szenarien und es ist eine tolle Ergänzung. Wer einmal Publisher-Subscriber-Systeme aufgebaut hat wird sie schon als eleganten Fortschritt ansehen.
Weiterhin ist MQTT besser als selbgestrickte S7 TCP-Kommunikation mit unglaublich "genialen" Selbstbau-Binärprotokollen. Warum, lies das nächste Kapitel.


MQTT - Fehlersuche mal einfach
Das bekannte Netzwerkanalyseprogramm Wireshark kennt das MQTT Protokoll. Somit kann man mit Wireshark die komplette MQTT-Kommunikation einsehen, protokollieren und analysieren. Bis ins Detail!



MQTT S7 - Worum es hier eigentlich geht :-)
Ok, jetzt aber zu Theme SPS. Unter

https://github.com/CarstenMaul/MQTT-Siemens-S7-300

könnt Ihr euch das aktuelle S7 Projekt inkl. Anleitung runterladen.
Ein Beispielprojekt in der Datei MQTT_Example.scl liegt bei. Alle Funktionen werden in diesem Beispielprojekt exemplarisch angesteuert: Connect, Publish, Susbsribe, Unsubscribe, Disconnect.
Das Projekt unterstützt sowohl CPUs mit integriertem Profinet als auch mit CP-Ethernet-Baugruppe.

Schaut Euch unser Werk mal an. Über Feedback würden wir uns sehr freuen, über erkannte Fehler natürlich um so mehr ;-)

Einen Broker könnt Ihr euch unter

http://www.mosquitto.org

laden. Den MQTT-Client MQTT.fx, der auch als Desktopanwendung die Möglichkeit gibt alle MQTT-Funktionen zu testen und mit einem Broker zu kommunizieren, gibt es hier:
http://mqttfx.jfx4ee.org/

So, jetzt hoffentlich viel Spass mit dieser Technologie.

Und bitte vergesst nicht: alle Software und Quellcodes ohne Gewähr! Ihr bekommt den S7 Quellcode zur freien Nutzung, der Einsatz in Euren Projekten erfolgt natürlich auf eigene Gefahr.


Gruß

Carsten

Step 7 Weiterbildung Simatic TIA Wincc Eplanp8

$
0
0
Hallo,

Ich bin Ingenieur der Elektrotechnik (Absolvent) und ich werde mich in SPS (Simatic) weiterbilden.

Dazu habe ich die Möglichkeit noch 1-2 Module auszuwählen.

ich würde gerne wissen was ist besser bzw verbreitet TIA Portal, Wincc oder Eplan p8 ?
was ermöglicht mir bessere Chancen eine Stelle zu bekommen.

Ich bedanke mich schon mal herzlich.

Auf eure Antworten freue mich sehr.

Gruß
AK2digital

Tripod-Kinematik und Software-Endschalter

$
0
0
Hi,

ich hab einen Tripod in Betrieb genommen und möchte nun die Software-Endschalter im laufenden Betrieb anpassen können.Genutzt wird eine SEW-Steuerung UHX71B und im Multimotion sind Software-Endschalter hinterlegt, welche getestet sind.
Nun würde ich aber gern die Software-Endschalter über Parameter verändern können wie es bei einfachen Achsen auch geht über die AxisInterface.Axis[x].config.... und ConfigChanged.
Allerdings finde ich dazu keine Möglichkeit für Kinematiken.

gruß

KV

TwinCat 3 Build 4020 Visual Studio 2010

$
0
0
Hi zusammen,

kürzlich haben wir eine Anlage mit TwinCat 3 Build 4018 ausgeliefert und dazu Visual Studio 2010.

Der Kunde möchte jetzt aber auf Build 4020 updaten. Ich bin jetzt bei Beckhoff darüber gestolpert, dass standardmäßig beim Build 4020 VS13 ausgeliefert wird.

Funktioniert Build 4020 auch weiterhin mit VS 2010 oder muss ich VS auch upgraden?
Viewing all 49250 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>