Moin Moin kann mir jemand weiterhelfen ? Ich müsste bei der oben genannten Simatic die Pufferbatterie tauschen , auf was muß ich achten ? Vielen Dank für eure Hilfe !!!
↧
Sonstiges Simatic S5 -95 U
↧
Step 7 Telegrammverkehr zwischen CPU und Kamera via Ethernet herstellen
Hallo zusammen,
Ich habe ein lokales Netz mit einer CPU 317F-2 PN/DP, meinem Rechner und einer Mobotix S15 Kamera eingerichtet, alles mit Ethernet verbunden.
Alle Teilnehmer lassen sich anpingen und sind verfügbar.
Mein Ziel ist es: Die Steuerung soll ein Telegramm an die Kamera schicken, damit diese mit der "Aufnahme" beginnt.
Die Kameraschnittstelle habe ich mithilfe der zugehörigen Kamerasoftware eingerichtet
- Port8000 ist der zu überwachende Netzwerk-Port der Kamera
- Die Kamera reagiert auf beliebigen Meldetext
- Die Kamera löst bei allen Sender aus
- IP-Adresse ist eingerichtet
Die Schnittstelle seitens der Steuerung kann ich leider nicht konfigurieren. Habe versucht, diese mithilfe von OZ Wizard zu konfigurieren. Ohne Erfolg.
Wie kann ich die Telegrammverkehr zwischen den beiden herstellen?
Wie kann ich ein Telegramm schicken? MB100 habe ich als Taktmerker eingerichtet. Die Standard-Bausteine (FB63, FB64, FB65 usw.) habe ich eingefügt, jedoch kann ich nirgendswo in der Variablentabelle erkennen, das sich etwas "tut". Muss ich dieses Standardbausteine noch konfigurieren?
Über Hilfe wäre ich sehr dankbar!
Gruß
Ich habe ein lokales Netz mit einer CPU 317F-2 PN/DP, meinem Rechner und einer Mobotix S15 Kamera eingerichtet, alles mit Ethernet verbunden.
Alle Teilnehmer lassen sich anpingen und sind verfügbar.
Mein Ziel ist es: Die Steuerung soll ein Telegramm an die Kamera schicken, damit diese mit der "Aufnahme" beginnt.
Die Kameraschnittstelle habe ich mithilfe der zugehörigen Kamerasoftware eingerichtet
- Port8000 ist der zu überwachende Netzwerk-Port der Kamera
- Die Kamera reagiert auf beliebigen Meldetext
- Die Kamera löst bei allen Sender aus
- IP-Adresse ist eingerichtet
Die Schnittstelle seitens der Steuerung kann ich leider nicht konfigurieren. Habe versucht, diese mithilfe von OZ Wizard zu konfigurieren. Ohne Erfolg.
Wie kann ich die Telegrammverkehr zwischen den beiden herstellen?
Wie kann ich ein Telegramm schicken? MB100 habe ich als Taktmerker eingerichtet. Die Standard-Bausteine (FB63, FB64, FB65 usw.) habe ich eingefügt, jedoch kann ich nirgendswo in der Variablentabelle erkennen, das sich etwas "tut". Muss ich dieses Standardbausteine noch konfigurieren?
Über Hilfe wäre ich sehr dankbar!
Gruß
↧
↧
Step 7 Kopplung Profinet Profibus
Hallo,
ist es möglich zwei CPUs (S7-400 Profibus, S7-1500 PN) mit Hilfe eines Profinet/Profibus Kopplers zu koppeln, um Daten zu senden?
Ich finde zwar von Siemens einen Koppler (6GK1411-5AB00), aber ich glaube der ist nicht geeignet für die Kopplung zweier CPUs?!?
Welche Hardware oder Lösungen gibt es sonst noch?
Gruß
Nadya
ist es möglich zwei CPUs (S7-400 Profibus, S7-1500 PN) mit Hilfe eines Profinet/Profibus Kopplers zu koppeln, um Daten zu senden?
Ich finde zwar von Siemens einen Koppler (6GK1411-5AB00), aber ich glaube der ist nicht geeignet für die Kopplung zweier CPUs?!?
Welche Hardware oder Lösungen gibt es sonst noch?
Gruß
Nadya
↧
WinCC Flex Bediengerät ändern KTP1000 > MP377 19Zoll Anzeigefehler
Hallo!
Habe hier ein kleines Problem mit WinCC Flexible 2008 SP3 bzw. dem MP377
Habe hier eine S7-315 2 DP/PN CPU mit einem KTP1000 und einem MP377 19 Zoll, auf der Visu des KTP sind einige Kurven Projektiert,
bei diesen Kurven habe ich je 3 Linien darüber gelegt ( sind Variabel verschiebar ) die eine SOLL und Über/Unter Temperatur anzeigen sollen während bei der Kurve der IST Wert angezeigt wird und sich dann zwischen den Linien bewegen sollte
( eventuell nicht die Professionelste Lösung aber geht :) )
Nun ist es so das ich die ganze Visu des KTP auf das MP377 *Migriert* habe, bis auf einige kleine Anzeigefehler alles Ok, was mich aber extrem stört ist das diese Linien sich nun IMMER hinter dem Kurvenfenster befinden egal was ich tue,
auch im Simulator ist das jedes mal der Fall....
ist das so gewollt oder lässt sich das irgendwie bewerkstelligen das ich meine 3 Linien wieder VOR dem Kurvenfenster sichtbar bringe ?
Diese Linien sind Anzeigetechnich recht wichtig....ich wäre auch für eine Alternative offen sofern es da was gibt :)
Danke schonmal im Voraus!
mfg
Ossi
Habe hier ein kleines Problem mit WinCC Flexible 2008 SP3 bzw. dem MP377
Habe hier eine S7-315 2 DP/PN CPU mit einem KTP1000 und einem MP377 19 Zoll, auf der Visu des KTP sind einige Kurven Projektiert,
bei diesen Kurven habe ich je 3 Linien darüber gelegt ( sind Variabel verschiebar ) die eine SOLL und Über/Unter Temperatur anzeigen sollen während bei der Kurve der IST Wert angezeigt wird und sich dann zwischen den Linien bewegen sollte
( eventuell nicht die Professionelste Lösung aber geht :) )
Nun ist es so das ich die ganze Visu des KTP auf das MP377 *Migriert* habe, bis auf einige kleine Anzeigefehler alles Ok, was mich aber extrem stört ist das diese Linien sich nun IMMER hinter dem Kurvenfenster befinden egal was ich tue,
auch im Simulator ist das jedes mal der Fall....
ist das so gewollt oder lässt sich das irgendwie bewerkstelligen das ich meine 3 Linien wieder VOR dem Kurvenfenster sichtbar bringe ?
Diese Linien sind Anzeigetechnich recht wichtig....ich wäre auch für eine Alternative offen sofern es da was gibt :)
Danke schonmal im Voraus!
mfg
Ossi
↧
TIA Variablenexport TIA-Portal
Hallo an Alle,
wir möchten demnächst auf die S7-1500 umsteigen und dann gerne auch den optimierten Baustein Zugriff nutzen. Problem ist nur, dass unsere eigenentwickelte Visualisierung momentan durch die absolute Adressierung den Zusammenhang zum S7-Projekt herstellt und diese nicht mehr nutzbar ist. Meine Frage wäre nun: Weiss jemand vielleicht, ob und wie es möglich ist, die symbolischen Adressen aller Variablen (auch der Datenbaustein-lokalen und nicht nur der globalen) aus einem TIA-Portal zu exportieren?
Vielen Dank für Antworten und Grüße
wir möchten demnächst auf die S7-1500 umsteigen und dann gerne auch den optimierten Baustein Zugriff nutzen. Problem ist nur, dass unsere eigenentwickelte Visualisierung momentan durch die absolute Adressierung den Zusammenhang zum S7-Projekt herstellt und diese nicht mehr nutzbar ist. Meine Frage wäre nun: Weiss jemand vielleicht, ob und wie es möglich ist, die symbolischen Adressen aller Variablen (auch der Datenbaustein-lokalen und nicht nur der globalen) aus einem TIA-Portal zu exportieren?
Vielen Dank für Antworten und Grüße
↧
↧
Frage zum Thema Motortuning (Phytron VSS 25.200.1.2) und Drehmomentberechnung
Hallo,
ich habe hier folgenden Aufbau. An einer Beckhoff-Klemme (EL7037) ist ein Phytron Schrittmotor (VSS 25.200.1.2) mit 24V angeschlossen. An den Motor ist eine Kunststoffscheibe montiert (Durchm. ca. 9,5cm, Dicke ca. 2mm) die sich um jeweils 180° mit 100°/s dreht bei einer Beschleunigung von derzeit 2000°/s². Ein Messsystem gibt es nicht. Mein erstes Problem ist, dass der Motor mindestens am Ende der Strecke etwas ruckelig läuft. Schritte scheint er dabei, zumindest innerhalb einer Zeitspanne von 3-4h nicht zu verlieren, ein Langzeittest erfolgt gerade. Ich hätte nun gerne gewusst an welcher Stelle ich in TC3 Änderungen machen kann/muss, damit der Motor etwas ruhiger läuft.
Dann würde mich interessieren, welches Drehmoment der Motor erbringen kann, im Datenblatt finde ich nur ein Haltemoment, gilt dies auch für die Bewegung? Und zu guter Letzt wäre es schön, wenn mir einer mal eine Formel (mit Link zur Erklärung) nennen könnte mit der ich ausrechnen kann welches Drehmoment der Motor zum Bewegen meiner Last benötigen würde. Ich habe Tante Google zwar schon befragt, aber das was ich da gefunden habe übersteigt meinen geistigen Horizont.
ich habe hier folgenden Aufbau. An einer Beckhoff-Klemme (EL7037) ist ein Phytron Schrittmotor (VSS 25.200.1.2) mit 24V angeschlossen. An den Motor ist eine Kunststoffscheibe montiert (Durchm. ca. 9,5cm, Dicke ca. 2mm) die sich um jeweils 180° mit 100°/s dreht bei einer Beschleunigung von derzeit 2000°/s². Ein Messsystem gibt es nicht. Mein erstes Problem ist, dass der Motor mindestens am Ende der Strecke etwas ruckelig läuft. Schritte scheint er dabei, zumindest innerhalb einer Zeitspanne von 3-4h nicht zu verlieren, ein Langzeittest erfolgt gerade. Ich hätte nun gerne gewusst an welcher Stelle ich in TC3 Änderungen machen kann/muss, damit der Motor etwas ruhiger läuft.
Dann würde mich interessieren, welches Drehmoment der Motor erbringen kann, im Datenblatt finde ich nur ein Haltemoment, gilt dies auch für die Bewegung? Und zu guter Letzt wäre es schön, wenn mir einer mal eine Formel (mit Link zur Erklärung) nennen könnte mit der ich ausrechnen kann welches Drehmoment der Motor zum Bewegen meiner Last benötigen würde. Ich habe Tante Google zwar schon befragt, aber das was ich da gefunden habe übersteigt meinen geistigen Horizont.
↧
TC3: Eingangssignal soll Programm starten (per Interrupt)
Hallo,
ich habe hier eine rotative Achse mit einem Schrittmotor die einen Nocken als Referenzpunkt hat. Da die Achse kein Messsystem besitzt möchte ich bei bestimmten Bedingungen diesen Nocken nutzen um festzustellen, ob der Motor Schritte verloren hat. Ich wollte bei einer fallenden Flanke die aktuelle Position auslesen und kontrollieren, ob diese innerhalb einer gewissen Toleranz liegt. Ist dies nicht der Fall wird die Achse sofort angehalten und die Referenz gelöscht. Mein Problem ist jetzt, dass die Nockenerkennung natürlich nicht zu langsam erfolgen darf, sonst meldet das System immer einen Fehler, obwohl alles in Ordnung ist. Eine Möglichkeit wäre jetzt, die Prüfung ständig in einer schnellen Task zu machen und über globale Variablen zwischen der schnellen und langsamen Task die Ergebnisse auszutauschen. Das Stoppen der Achse könnte in der langsamen Task erfolgen, ich würde es allerdings gerne über einen Interrupt lösen. Daher nun meine Frage an die Experten hier, gibt es bei TC3 die Möglichkeit Eingänge zur Auslösung eines Interrupts zu konfigurieren und wie ? Im Hilfesystem habe ich zu dem Thema nur etwas in der Rubrik Roboter gefunden und Tante Google war auch nicht sehr hilfreich (oder ich zu ungeduldig). Da bei der ersten Lösung die schnelle Task aber auch jedes Mal den Status der Achse über "ReadStatus" auslesen müsste um die Position zu bekommen, habe ich die Befürchtung, dass System geht zu sehr in die Knie
ich habe hier eine rotative Achse mit einem Schrittmotor die einen Nocken als Referenzpunkt hat. Da die Achse kein Messsystem besitzt möchte ich bei bestimmten Bedingungen diesen Nocken nutzen um festzustellen, ob der Motor Schritte verloren hat. Ich wollte bei einer fallenden Flanke die aktuelle Position auslesen und kontrollieren, ob diese innerhalb einer gewissen Toleranz liegt. Ist dies nicht der Fall wird die Achse sofort angehalten und die Referenz gelöscht. Mein Problem ist jetzt, dass die Nockenerkennung natürlich nicht zu langsam erfolgen darf, sonst meldet das System immer einen Fehler, obwohl alles in Ordnung ist. Eine Möglichkeit wäre jetzt, die Prüfung ständig in einer schnellen Task zu machen und über globale Variablen zwischen der schnellen und langsamen Task die Ergebnisse auszutauschen. Das Stoppen der Achse könnte in der langsamen Task erfolgen, ich würde es allerdings gerne über einen Interrupt lösen. Daher nun meine Frage an die Experten hier, gibt es bei TC3 die Möglichkeit Eingänge zur Auslösung eines Interrupts zu konfigurieren und wie ? Im Hilfesystem habe ich zu dem Thema nur etwas in der Rubrik Roboter gefunden und Tante Google war auch nicht sehr hilfreich (oder ich zu ungeduldig). Da bei der ersten Lösung die schnelle Task aber auch jedes Mal den Status der Achse über "ReadStatus" auslesen müsste um die Position zu bekommen, habe ich die Befürchtung, dass System geht zu sehr in die Knie
↧
Modbus TCP (dez) zu Codesys "Umrechnung"
Hallo!
ich möchte via Modbus TCP Werte aus der (WAGO) SPS auslesen und schreiben. Mit den Merker geht das auch wunderbar.
Bei Ein- und Ausgängen mache ich aber anscheinend einen grundsätzlichen Fehler, der mir auch mit Wago Dokumentation nicht auffällt.
MX0.0 finde ich ab 12288.
Ab welchem Byte finde ich z.B. QX8.11? Mit 8x16+11=139 bekomme ich nicht den Wert des Ausgangs zurück.
Ich stehe irgendwie auf dem Schlauch. Kann mich jemand runterschubsen?:oops:
danke
ich möchte via Modbus TCP Werte aus der (WAGO) SPS auslesen und schreiben. Mit den Merker geht das auch wunderbar.
Bei Ein- und Ausgängen mache ich aber anscheinend einen grundsätzlichen Fehler, der mir auch mit Wago Dokumentation nicht auffällt.
MX0.0 finde ich ab 12288.
Ab welchem Byte finde ich z.B. QX8.11? Mit 8x16+11=139 bekomme ich nicht den Wert des Ausgangs zurück.
Ich stehe irgendwie auf dem Schlauch. Kann mich jemand runterschubsen?:oops:
danke
↧
Sonstiges Moeller XVC-675 bootet nicht
Hallo zusammen,
ich habe ein Problem mit einem Moeller XVC-675-GTI
Das Gerät Bootet und zeigt auf dem Display nur folgende Meldung, nach ca. 60sek startet das Gerät neu und die Meldung erscheint erneut dies wiederholt sich wie eine nicht endene Schleife.
USB Legacy Support Disabled in the Setup !
Ich habe eine PS2 Tastatur angeschlossen mit dieser lässt sich das Bios öffnen, da ich aber leider Passwort habe nur (View) Modus es können keine Daten verändert werden.
Ich könnte mir Vorstellen das der CF Kartenleser eine USB Komponente ist und das Gerät deswegen nicht bootet.
Leider bekomme ich von Moeller keine Information bezüglich es Bios Passwortes,
kann mir vielleicht einer von euch helfen ?
Vielen Dank
Timo
ich habe ein Problem mit einem Moeller XVC-675-GTI
Das Gerät Bootet und zeigt auf dem Display nur folgende Meldung, nach ca. 60sek startet das Gerät neu und die Meldung erscheint erneut dies wiederholt sich wie eine nicht endene Schleife.
USB Legacy Support Disabled in the Setup !
Ich habe eine PS2 Tastatur angeschlossen mit dieser lässt sich das Bios öffnen, da ich aber leider Passwort habe nur (View) Modus es können keine Daten verändert werden.
Ich könnte mir Vorstellen das der CF Kartenleser eine USB Komponente ist und das Gerät deswegen nicht bootet.
Leider bekomme ich von Moeller keine Information bezüglich es Bios Passwortes,
kann mir vielleicht einer von euch helfen ?
Vielen Dank
Timo
↧
↧
TIA S7 Projekt mogrieren
Moin zusammen,
kann mir jemand bei der Migrierung helfen.
Das S7 Projekt habe ich Übersetzt, Reverenzdaten geprüft und alles was man vorher machen soll.
Nun lässt sich das Projekt nicht migrieren, nicht über das Migrierungstool weder über TIA selber.
Es sind Bausteine vorhenden die ein Schloss besitzen, sekbst erstellte und auch Systembausteine. Diesen Schutz muss ich vorher aufheben um das Projekt zu migrieren.
Es bsteht nicht zu jedem Baustein mit Schloss auch eine Quelle und die Quellen die ich habe sind auch nicht mit dem Know How Schutz versehen.
Wie kann ich nun die FB / FC´s freigeben?
kann mir jemand bei der Migrierung helfen.
Das S7 Projekt habe ich Übersetzt, Reverenzdaten geprüft und alles was man vorher machen soll.
Nun lässt sich das Projekt nicht migrieren, nicht über das Migrierungstool weder über TIA selber.
Es sind Bausteine vorhenden die ein Schloss besitzen, sekbst erstellte und auch Systembausteine. Diesen Schutz muss ich vorher aufheben um das Projekt zu migrieren.
Es bsteht nicht zu jedem Baustein mit Schloss auch eine Quelle und die Quellen die ich habe sind auch nicht mit dem Know How Schutz versehen.
Wie kann ich nun die FB / FC´s freigeben?
↧
TC3: Frage zur Aktualisierungszeit gemappter I/O-Variablen
Hallo,
ich möchte gerne über eine schnellere Task (<<10ms) auf einen Eingang zugreifen. Welcher das sein wird weiß diese Task jedoch nicht, eine langsamere Task, in der dieser Eingang mit "AT %I*" angelegt ist, übergibt der schnellen Task über eine globale Variable einen Pointer auf diese Variable. Da ich nicht genau weiß was beim Mapping alles passiert würde mich jetzt mal interessieren, mit welcher Geschwindigkeit die dereferenzierte Variable in der schnellen Task aktualisiert wird, mit der Zykluszeit der I/O-Task oder mit der Zykluszeit der langsamen Task? Das das Programm der schnellen Task die Variable natürlich nur so schnell auswertet wie ihre Zykluszeit ist, ist mir dabei klar.
Gruß
Oliver
ich möchte gerne über eine schnellere Task (<<10ms) auf einen Eingang zugreifen. Welcher das sein wird weiß diese Task jedoch nicht, eine langsamere Task, in der dieser Eingang mit "AT %I*" angelegt ist, übergibt der schnellen Task über eine globale Variable einen Pointer auf diese Variable. Da ich nicht genau weiß was beim Mapping alles passiert würde mich jetzt mal interessieren, mit welcher Geschwindigkeit die dereferenzierte Variable in der schnellen Task aktualisiert wird, mit der Zykluszeit der I/O-Task oder mit der Zykluszeit der langsamen Task? Das das Programm der schnellen Task die Variable natürlich nur so schnell auswertet wie ihre Zykluszeit ist, ist mir dabei klar.
Gruß
Oliver
↧
kein MTTFd-Wert für DC-Umrichtereingang
Hallo zusammen,
folgendes Szenario:
Ich will einen Umrichter (DC-Stromrichter) mit PL d abschalten. Nun hat der DC-Stromrichter leider keinen STO-Eingang mit Performance Level.
Meine Idee ist, mit einem Kanal schalte ich ein Schütz, welcher die Spannungsversorgung des Stromrichters wegschaltet und mit dem zweiten Kanal schalte ich den Eingang Reglerfreigabe des Stromrichters weg.
Für das Schütz habe ich Kennwerte, das Problem ist der Eingang des Stromrichters.
Nun meine Frage, wenn der Hersteller mir keine Daten geben kann, darf ich dann die 10 Jahre für den Eingang verwenden, wie in der DIN EN ISO 13849-1 im Kapitel 4.5.2 steht?
Wie seht ihr das?
folgendes Szenario:
Ich will einen Umrichter (DC-Stromrichter) mit PL d abschalten. Nun hat der DC-Stromrichter leider keinen STO-Eingang mit Performance Level.
Meine Idee ist, mit einem Kanal schalte ich ein Schütz, welcher die Spannungsversorgung des Stromrichters wegschaltet und mit dem zweiten Kanal schalte ich den Eingang Reglerfreigabe des Stromrichters weg.
Für das Schütz habe ich Kennwerte, das Problem ist der Eingang des Stromrichters.
Nun meine Frage, wenn der Hersteller mir keine Daten geben kann, darf ich dann die 10 Jahre für den Eingang verwenden, wie in der DIN EN ISO 13849-1 im Kapitel 4.5.2 steht?
Wie seht ihr das?
↧
TIA S7-1200 und Beijer Display über MODBUS RTU (mittels CM1241)
Hey ich habe mal wieder ein Anliegen :icon_mrgreen:
Folgender Plan:
Ich möchte mit meiner S7-1200 als Modbus-Master Daten per RS485(Modbus RTU) an mein Beijer Display (Slave) senden und Daten vom Display auslesen.
Dazu habe ich mir das CM1241 RS232/485 Modul besorgt.
Ich bekomme leider einfach keine Kommunikation zustande. Verdrahtung des Kabels sollte stimmen, ebenso auch die Konfiguration (Baud, Partität etc )
von S7-1200 und Display.
Versuche es derzeit über die Bausteine MB_Comm_Load und MB_Master hinzubekommen (ähnlich dem Beispielprogramm von Siemens zur Modbus-Kommunikation zwischen zwei S7-1200)
Leider noch ohne Erfolg.
Hat jemand Tipps oder vll ein paar Hilfestellungen für mich ?
Danke schonmal
Lg Ben
Folgender Plan:
Ich möchte mit meiner S7-1200 als Modbus-Master Daten per RS485(Modbus RTU) an mein Beijer Display (Slave) senden und Daten vom Display auslesen.
Dazu habe ich mir das CM1241 RS232/485 Modul besorgt.
Ich bekomme leider einfach keine Kommunikation zustande. Verdrahtung des Kabels sollte stimmen, ebenso auch die Konfiguration (Baud, Partität etc )
von S7-1200 und Display.
Versuche es derzeit über die Bausteine MB_Comm_Load und MB_Master hinzubekommen (ähnlich dem Beispielprogramm von Siemens zur Modbus-Kommunikation zwischen zwei S7-1200)
Leider noch ohne Erfolg.
Hat jemand Tipps oder vll ein paar Hilfestellungen für mich ?
Danke schonmal
Lg Ben
↧
↧
Messwerte mit Zeitstempel versehen und in eine CSV Datei schreiben
Hallo liebe Leute :),
ich komme momentan mit meinem Projekt nicht weiter und hoffe dass mir hier geholfen werden kann :)
Ich arbeite mit einer Wägezelle, die ich mit einer Beckhoff Klemme über TwinCAT2 anspreche. Ich habe schon ein Programm zur Kalibrierung geschrieben,und um die rohen Messdaten in Newton umzuwandeln und ich habe auch schon eine CSV Datei erstellt dazufolgender Code:
FUNCTION_BLOCK WriteCSV
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
bWrite : BOOL := FALSE;(* Rising edge starts program execution *)
sNetId : T_AmsNetId := ''; (* TwinCAT system network address *)
sFileName : T_MaxString := 'C:\Temp\Sensorauswertung.csv';(* CSV destination file path and name *)
sCSVLine : T_MaxString := '';(* Single CSV text line (row, record), we are using string as record buffer *)
sCSVField : T_MaxString := '';(* Single CSV field value (column, record field) *)
bBusy : BOOL;
bError : BOOL;
nErrId : UDINT;
nRow : UDINT := 0;(* Row number (record) *)
nColumn : UDINT := 0;(* Column number (record field) *)
hFile : UINT := 0;(* File handle of the source file *)
step : DWORD := 0;
fbFileOpen : FB_FileOpen;(* Opens file *)
fbFileClose : FB_FileClose;(* Closes file *)
fbFilePuts : FB_FilePuts;(* Writes one record (line) *)
fbWriter : FB_CSVMemBufferWriter;(* Helper function block used to create CSV data bytes (single record line) *)
MAX_CSV_COLUMNS :UINT :=1;
MAX_CSV_ROWS :UINT :=200;
MAX_CSV_FIELD_LENGTH :UINT:=250;
database : ARRAY[0..300, 0..1 ] OF STRING(250);
END_VAR
CASE step OF
0: (* Button bWrite muss aktiviert werden *)
IF bWrite THEN
bWrite := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrId := 0;
hFile := 0;
nRow := 0;
nColumn := 0;
step := 1;
END_IF
1: (* Open source file *)
fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := sNetId, sPathName := sFileName, nMode := FOPEN_MODEWRITE OR FOPEN_MODETEXT,(* Open file in TEXT mode! *)
ePath := PATH_GENERIC, bExecute := TRUE );
step := 2;
2:(* Wait until open not busy *)
fbFileOpen( bExecute := FALSE, bError => bError, nErrID => nErrID, hFile => hFile );
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
step := 3;
ELSE(* Error: file not found? *)
step := 100;
END_IF
END_IF
3:(* Convert one PLC record to CSV format *)
sCSVLine := '';
fbWriter.eCmd := eEnumCmd_First;(* Write first field value *)
IF nRow <= MAX_CSV_ROWS THEN
FOR nColumn := 0 TO MAX_CSV_COLUMNS BY 1 DO
sCSVField := STRING_TO_CSVFIELD( database[ nRow, nColumn ], FALSE );(* TODO: Get field value from your application *)
(* Add new field to the record buffer *)
fbWriter( pBuffer := ADR( sCSVLine ),
cbBuffer := SIZEOF( sCSVLine ) - 1,
putValue := sCSVField, pValue := 0,
cbValue := 0,
bCRLF := ( nColumn = MAX_CSV_COLUMNS )
); (* bCRLF == TRUE => Write CRLF after the last field value *)
IF fbWriter.bOk THEN
fbWriter.eCmd := eEnumCmd_Next;(* Write next field value *)
ELSE(* Error *)
step := 100;
RETURN;
END_IF
END_FOR(* FOR nColumn := 0... *)
(* FB_FilePuts adds allready CR (carriage return) to the written line.
We have to replace the $R$L characters with $L character to avoid double CR. *)
IF RIGHT( sCSVLine, 2 ) = '$R$L' THEN
sCSVLine := REPLACE( sCSVLine, '$L', 2, LEN( sCSVLine ) - 1 );
END_IF
nRow := nRow + 1;(* Increment number of created records (rows) *)
step := 4;(* Write record to the file *)
ELSE(* All rows written => Close file *)
step := 10;
END_IF
4: (* Write single text line *)
fbFilePuts( bExecute := FALSE );
fbFilePuts( sNetId := sNetId, hFile := hFile, sLine := sCSVLine, bExecute := TRUE );
step := 5;
5:(* Wait until write not busy *)
fbFilePuts( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF NOT fbFilePuts.bBusy THEN
IF NOT fbFilePuts.bError THEN
step := 3;(* Write next record *)
ELSE(* Error *)
step := 100;
END_IF
END_IF
10: (* Close source file *)
fbFileClose( bExecute := FALSE );
fbFileClose( sNetId := sNetId, hFile := hFile, bExecute := TRUE );
step := 11;
11:(* Wait until close not busy *)
fbFileClose( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF ( NOT fbFileClose.bBusy ) THEN
hFile := 0;
step := 100;
END_IF
100: (* Error or ready step => cleanup *)
IF ( hFile <> 0 ) THEN
step := 10; (* Close the source file *)
ELSE
bBusy := FALSE;
step := 0; (* Ready *)
END_IF
END_CASE
END_FUNCTION_BLOCK
Wie kann ich nun meine Normierten Messwerte (rMesswertConv) mit einem Zeitstempel versehen und in mein Array (database) schreiben? Ich starte meine Messung über einen Button (bWrite) und beende diese dann auch drüber. Eine Messung dauert zwischen 3 und 10 Sekunden und ich kriege jede Millisekunde einen Messwert.
Ich bin noch recht neu in der SPS Programmierung, habe mir viel dazu selber angelesen aber noch kein "Profi" natürlich, kann also sein, dass die Lösung ziemlich einfach ist und ich einfach nur nicht das Wissen darüber verfüge, deswegen hoffe ich dass mir hier jemand helfen kann :)
Vielen Dank im Voraus!
ich komme momentan mit meinem Projekt nicht weiter und hoffe dass mir hier geholfen werden kann :)
Ich arbeite mit einer Wägezelle, die ich mit einer Beckhoff Klemme über TwinCAT2 anspreche. Ich habe schon ein Programm zur Kalibrierung geschrieben,und um die rohen Messdaten in Newton umzuwandeln und ich habe auch schon eine CSV Datei erstellt dazufolgender Code:
FUNCTION_BLOCK WriteCSV
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
bWrite : BOOL := FALSE;(* Rising edge starts program execution *)
sNetId : T_AmsNetId := ''; (* TwinCAT system network address *)
sFileName : T_MaxString := 'C:\Temp\Sensorauswertung.csv';(* CSV destination file path and name *)
sCSVLine : T_MaxString := '';(* Single CSV text line (row, record), we are using string as record buffer *)
sCSVField : T_MaxString := '';(* Single CSV field value (column, record field) *)
bBusy : BOOL;
bError : BOOL;
nErrId : UDINT;
nRow : UDINT := 0;(* Row number (record) *)
nColumn : UDINT := 0;(* Column number (record field) *)
hFile : UINT := 0;(* File handle of the source file *)
step : DWORD := 0;
fbFileOpen : FB_FileOpen;(* Opens file *)
fbFileClose : FB_FileClose;(* Closes file *)
fbFilePuts : FB_FilePuts;(* Writes one record (line) *)
fbWriter : FB_CSVMemBufferWriter;(* Helper function block used to create CSV data bytes (single record line) *)
MAX_CSV_COLUMNS :UINT :=1;
MAX_CSV_ROWS :UINT :=200;
MAX_CSV_FIELD_LENGTH :UINT:=250;
database : ARRAY[0..300, 0..1 ] OF STRING(250);
END_VAR
CASE step OF
0: (* Button bWrite muss aktiviert werden *)
IF bWrite THEN
bWrite := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrId := 0;
hFile := 0;
nRow := 0;
nColumn := 0;
step := 1;
END_IF
1: (* Open source file *)
fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := sNetId, sPathName := sFileName, nMode := FOPEN_MODEWRITE OR FOPEN_MODETEXT,(* Open file in TEXT mode! *)
ePath := PATH_GENERIC, bExecute := TRUE );
step := 2;
2:(* Wait until open not busy *)
fbFileOpen( bExecute := FALSE, bError => bError, nErrID => nErrID, hFile => hFile );
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
step := 3;
ELSE(* Error: file not found? *)
step := 100;
END_IF
END_IF
3:(* Convert one PLC record to CSV format *)
sCSVLine := '';
fbWriter.eCmd := eEnumCmd_First;(* Write first field value *)
IF nRow <= MAX_CSV_ROWS THEN
FOR nColumn := 0 TO MAX_CSV_COLUMNS BY 1 DO
sCSVField := STRING_TO_CSVFIELD( database[ nRow, nColumn ], FALSE );(* TODO: Get field value from your application *)
(* Add new field to the record buffer *)
fbWriter( pBuffer := ADR( sCSVLine ),
cbBuffer := SIZEOF( sCSVLine ) - 1,
putValue := sCSVField, pValue := 0,
cbValue := 0,
bCRLF := ( nColumn = MAX_CSV_COLUMNS )
); (* bCRLF == TRUE => Write CRLF after the last field value *)
IF fbWriter.bOk THEN
fbWriter.eCmd := eEnumCmd_Next;(* Write next field value *)
ELSE(* Error *)
step := 100;
RETURN;
END_IF
END_FOR(* FOR nColumn := 0... *)
(* FB_FilePuts adds allready CR (carriage return) to the written line.
We have to replace the $R$L characters with $L character to avoid double CR. *)
IF RIGHT( sCSVLine, 2 ) = '$R$L' THEN
sCSVLine := REPLACE( sCSVLine, '$L', 2, LEN( sCSVLine ) - 1 );
END_IF
nRow := nRow + 1;(* Increment number of created records (rows) *)
step := 4;(* Write record to the file *)
ELSE(* All rows written => Close file *)
step := 10;
END_IF
4: (* Write single text line *)
fbFilePuts( bExecute := FALSE );
fbFilePuts( sNetId := sNetId, hFile := hFile, sLine := sCSVLine, bExecute := TRUE );
step := 5;
5:(* Wait until write not busy *)
fbFilePuts( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF NOT fbFilePuts.bBusy THEN
IF NOT fbFilePuts.bError THEN
step := 3;(* Write next record *)
ELSE(* Error *)
step := 100;
END_IF
END_IF
10: (* Close source file *)
fbFileClose( bExecute := FALSE );
fbFileClose( sNetId := sNetId, hFile := hFile, bExecute := TRUE );
step := 11;
11:(* Wait until close not busy *)
fbFileClose( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF ( NOT fbFileClose.bBusy ) THEN
hFile := 0;
step := 100;
END_IF
100: (* Error or ready step => cleanup *)
IF ( hFile <> 0 ) THEN
step := 10; (* Close the source file *)
ELSE
bBusy := FALSE;
step := 0; (* Ready *)
END_IF
END_CASE
END_FUNCTION_BLOCK
Wie kann ich nun meine Normierten Messwerte (rMesswertConv) mit einem Zeitstempel versehen und in mein Array (database) schreiben? Ich starte meine Messung über einen Button (bWrite) und beende diese dann auch drüber. Eine Messung dauert zwischen 3 und 10 Sekunden und ich kriege jede Millisekunde einen Messwert.
Ich bin noch recht neu in der SPS Programmierung, habe mir viel dazu selber angelesen aber noch kein "Profi" natürlich, kann also sein, dass die Lösung ziemlich einfach ist und ich einfach nur nicht das Wissen darüber verfüge, deswegen hoffe ich dass mir hier jemand helfen kann :)
Vielen Dank im Voraus!
↧
TIA Eingangwort (Hex) als Integer interpretieren
Hallo zusammen,
ich habe eine etwas ungewöhnliche Frage:
Ich habe eine Anwendung, bei der ich einen MBus Wärmemengenzähler mit einer 1512SP-1 PN auslesen soll.
Von diesem Zähler bekomme ich verschiedenste Zählerstände und Aktualwerte.
Unter anderem auch die aktuelle Vor und Rücklauftemperatur.
Allerdings in einem Hex Format.
Hier zwei Beispiele was ich meine:
für eine Temperatur von 21,5 °C bekomme ich den Wert 16#0215
für eine Temperatur von 109,7 °C bekomme ich den Wert 16#1097
Ich sollte nun aber diese Hex Werte in Lesbare Int Werte "umwandeln".
Sprich 16#0215 soll 215 (Int) werden und 16#1097 soll 1097 (int) werden.
Meine erste Idee wäre es die einzelnen "Halbbytes" zu markieren, diese zwischenergebnisse mit der Stelle multiplizieren (*1, *10, *100, *1000) und dann aufsummieren.
Allerdings ist diese Methode SEHR aufwendig.
Nun meine Frage an euch: gibt es eine einfachere, elegantere Lösung?
evtl. ein S7 Befehl oder auch eine Formel?
Danke schon mal für eure Hilfe.
Sg, Michael
ich habe eine etwas ungewöhnliche Frage:
Ich habe eine Anwendung, bei der ich einen MBus Wärmemengenzähler mit einer 1512SP-1 PN auslesen soll.
Von diesem Zähler bekomme ich verschiedenste Zählerstände und Aktualwerte.
Unter anderem auch die aktuelle Vor und Rücklauftemperatur.
Allerdings in einem Hex Format.
Hier zwei Beispiele was ich meine:
für eine Temperatur von 21,5 °C bekomme ich den Wert 16#0215
für eine Temperatur von 109,7 °C bekomme ich den Wert 16#1097
Ich sollte nun aber diese Hex Werte in Lesbare Int Werte "umwandeln".
Sprich 16#0215 soll 215 (Int) werden und 16#1097 soll 1097 (int) werden.
Meine erste Idee wäre es die einzelnen "Halbbytes" zu markieren, diese zwischenergebnisse mit der Stelle multiplizieren (*1, *10, *100, *1000) und dann aufsummieren.
Allerdings ist diese Methode SEHR aufwendig.
Nun meine Frage an euch: gibt es eine einfachere, elegantere Lösung?
evtl. ein S7 Befehl oder auch eine Formel?
Danke schon mal für eure Hilfe.
Sg, Michael
↧
TIA Highspeed Boolean Prozessor FM352-5
Hallo,
es gibt in der 300er Welt den Highspeed Boolean Prozessor FM352-5,
wirde es den auch in der 1500er Welt geben ?
Hat jemand da Infos ?
Gruß und Danke
es gibt in der 300er Welt den Highspeed Boolean Prozessor FM352-5,
wirde es den auch in der 1500er Welt geben ?
Hat jemand da Infos ?
Gruß und Danke
↧
Schulung AS-Interface mit SIMATIC S7 in Hochheim am Main
SIMATIC Schulungen in Hochheim
Für die folgende Schulung können wir Ihnen im September noch freie Plätze an unserem Standort in Hochheim anbieten:
AS-Interface mit SIMATIC S7
AS-I, CP 343, Netzübergänge
Zielgruppe
Programmierer, Inbetriebnehmer, Projektierer, fortgeschrittenes Servicepersonal
Voraussetzungen
Grundkenntnisse SIMATIC S7
Dauer: 1 Tag
Preis: 365,00 zzgl. Mwst.
Beschreibung / Lernziele
Sie lernen das Aktuator-Sensor-Interface (AS-I) und seine Komponenten kennen und anwenden sowie Fehler zu diagnostizieren und zu beheben.
Ihre erlernten theoretischen Kenntnisse vertiefen Sie durch zahlreiche praktische Übungen an einem Anlagenmodell.
Nach der Schulung können Sie AS-I Systeme projektieren, in Betrieb nehmen und in diesen Systemen Fehler diagnostizieren und beheben.
Inhalte
Software / Geräte
STEP 7 V5.5, S7-300, CP 343-2, DP/AS-i Link, Anlagenmodell
Unsere Empfehlung
Besuchen Sie anschließend Erweiterungsmodule für Engineering, Bedienen/Beobachten, Kommunikation und Technologische Funktionen.
Wir beraten Sie gerne und freuen uns auf Ihren Anruf!
Grollmus GmbH
Geisenheimer Str.2
65239 Hochheim am Main
Telefon: +49 6146 82828-0
Fax: +49 6146 82828-90
info@grollmus.de
www.grollmus.de
Für die folgende Schulung können wir Ihnen im September noch freie Plätze an unserem Standort in Hochheim anbieten:
AS-Interface mit SIMATIC S7
AS-I, CP 343, Netzübergänge
Zielgruppe
Programmierer, Inbetriebnehmer, Projektierer, fortgeschrittenes Servicepersonal
Voraussetzungen
Grundkenntnisse SIMATIC S7
Dauer: 1 Tag
Preis: 365,00 zzgl. Mwst.
Beschreibung / Lernziele
Sie lernen das Aktuator-Sensor-Interface (AS-I) und seine Komponenten kennen und anwenden sowie Fehler zu diagnostizieren und zu beheben.
Ihre erlernten theoretischen Kenntnisse vertiefen Sie durch zahlreiche praktische Übungen an einem Anlagenmodell.
Nach der Schulung können Sie AS-I Systeme projektieren, in Betrieb nehmen und in diesen Systemen Fehler diagnostizieren und beheben.
Inhalte
- Funktionsweise des Aktuator-Sensor-Interfaces (AS-I)
- Systemkomponenten und Anschlusstechnik
- Systemkonfiguration und Adressierung
- Standardbetrieb und erweiterter Betrieb
- Netzübergänge
- Vorgehensweise bei der Inbetriebnahme und Störungssuche
Software / Geräte
STEP 7 V5.5, S7-300, CP 343-2, DP/AS-i Link, Anlagenmodell
Unsere Empfehlung
Besuchen Sie anschließend Erweiterungsmodule für Engineering, Bedienen/Beobachten, Kommunikation und Technologische Funktionen.
Wir beraten Sie gerne und freuen uns auf Ihren Anruf!
Grollmus GmbH
Geisenheimer Str.2
65239 Hochheim am Main
Telefon: +49 6146 82828-0
Fax: +49 6146 82828-90
info@grollmus.de
www.grollmus.de
↧
↧
Vererbung und Übergabe von Strukturen in CoDeSys 3
Hallo,
kann mir jemand erklären, warum ich eine Struktur, die ich von einer anderen erben lasse, an eine Struktur vom Typ der Basisstruktur übergeben kann, obwohl diese ja kleiner ist, als die erbende Struct, allerdings nicht umgekehrt?
Also eine Struktur vom Basistyp lässt sich nicht an die Struktur vom vererbten Typ zuweisen, da gibt es einen Compilerfehler.
Macht in meinen Augen gar keinen Sinn, oder?
Gruß
Jochen
kann mir jemand erklären, warum ich eine Struktur, die ich von einer anderen erben lasse, an eine Struktur vom Typ der Basisstruktur übergeben kann, obwohl diese ja kleiner ist, als die erbende Struct, allerdings nicht umgekehrt?
Also eine Struktur vom Basistyp lässt sich nicht an die Struktur vom vererbten Typ zuweisen, da gibt es einen Compilerfehler.
Macht in meinen Augen gar keinen Sinn, oder?
Gruß
Jochen
↧
Am Wochenende schon was vor?
Im Kino läuft jetzt der Film "Zero Days" - ein spannender Doku-Thriller
über den Stuxnet-Vorfall und gefährliche Hacker-Angriffe.
mehr zum Film:
http://www.heise.de/newsticker/meldu...g-3300267.html
Übrigens: mit der mbSECBOX können Sie Ihr System vor den
Folgen eines verheerenden Angriffs schützen:
mehr zur mbSECBOX:
https://www.mbconnectline.com/de/produkte/mbsecbox.html
über den Stuxnet-Vorfall und gefährliche Hacker-Angriffe.
mehr zum Film:
http://www.heise.de/newsticker/meldu...g-3300267.html
Übrigens: mit der mbSECBOX können Sie Ihr System vor den
Folgen eines verheerenden Angriffs schützen:
mehr zur mbSECBOX:
https://www.mbconnectline.com/de/produkte/mbsecbox.html
↧
TIA Fehlermeldung bei der Win10 Installation von TIA
Hallo,
bei mir lief die Installation des TIA Portals unter Win10 unproblematisch. Ein Kollege kämpft mit der nachfolgenden Fehlermeldung in Win10. Er hat schon einmal Win10 neu installiert und mehrfach die TIA Installationsdateien ausgeführt.
Beim Einfügen eines Geräts in TIA ergibt sich die im Anhang gezeigte Fehlermeldung.
Weiß jemand Rat, warum es bei den meisten unproblematisch zu installieren ist, aber bei einigen solche Fehlermeldungen auftreten?
Danke,
bei mir lief die Installation des TIA Portals unter Win10 unproblematisch. Ein Kollege kämpft mit der nachfolgenden Fehlermeldung in Win10. Er hat schon einmal Win10 neu installiert und mehrfach die TIA Installationsdateien ausgeführt.
Beim Einfügen eines Geräts in TIA ergibt sich die im Anhang gezeigte Fehlermeldung.
Weiß jemand Rat, warum es bei den meisten unproblematisch zu installieren ist, aber bei einigen solche Fehlermeldungen auftreten?
Danke,
↧