540.421 aktive Mitglieder*
1.309 Besucher online*
Kostenfrei registrieren
Anmelden Registrieren
Siemens Forum

Digital Industries, Motion Control, Machine Tool Systems

Eigenen Dialog programmieren

Beitrag 24.06.2016, 11:17 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo zusammen,
ich bin momentan dabei, einen eigenen Dialog zu programmieren, der aus unserem NC-Programm an unterschiedlichen Stellen aufgerufen wird, damit die Werker dort Messwerte eintragen können. Das funktioniert auch soweit, da das im Handbuch BE2 auch gut erklärt ist.
Dort habe ich auch den Hinweis gefunden, dass man über das Kürzel FCT eigene Funktionen, die in einer C++-Bibliothek ausgelagert werden, aus dem Dialog heraus aufrufen kann. Das Gerüst für so eine externe Funktion habe ich erstellt und der Dialog kann diese Funktion dann auch aufrufen.
Allerdings geht aus dem Handbuch nicht hervor, in welcher Weise die übergebenen Variablen in der externen Funktion verarbeitet werden können und wie die Übergabe-Konvention dort ist.

Kennt sich jemand mit diesem Thema aus und hat evtl. sogar eine Beispiel-Datei?

Herzlichen Dank,

Philipp
TOP    
Beitrag 02.12.2019, 07:06 Uhr
SIemensJonny
SIemensJonny
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 02.12.2019
Beiträge: 2

Hallo Philipp,
ich stehe gerade vor der selben Herausforderung (Einbindung einer external function "FCT"). Hast du zu diesem Thema eine Lösung gefunden bzw. kannst du eine Beschreibung/ Beispiel zur Verfügung stellen?
Danke und beste Grüße, Jonny
TOP    
Beitrag 02.12.2019, 11:34 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo Jonny,

ich habe zwar nicht das Problem direkt gelöst, aber die Funktionalität der FCT-Funktion.
Ich habe dafür von Siemens selber einen Programm-Quellcode und die dazugehörige .com und .mpf bekommen. Der Quellcode wurde 2012 mal mit C++ geschrieben. Wenn man den in Visual C++ 2008 kompiliert, dann funktioniert der auf der Siemens-Steuerung über die FCT-Funktion (zumindest bei mir).
Nutzt man ein neueres VisualStudio, geht das nicht mehr.

Da ich darüber aber mittlerweile eine Abfrage an unser ERP-System stellen will, hänge ich da noch in der Luft. Die Funktion habe ich schon geschrieben, kann da aber nicht weiter testen, weil unsere Maschine sich nicht vernünftig am Netzwerk betreiben lässt. Da prüft Siemens seit geraumer Zeit, was da nicht richtig funktioniert.

Aber wir sind da in der Endphase, es soll bald weitergehen und dann kann ich die Abfrage auch vernünftig testen.

Was hast du vor? Soll ich die Dateien zur Verfügung stellen?

Gruß,
Philipp
TOP    
Beitrag 02.12.2019, 12:42 Uhr
SIemensJonny
SIemensJonny
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 02.12.2019
Beiträge: 2

Hallo Philipp,
wenn du mir die Siemens-Files zur Verfügung stellen könntest wär das der Hammer.
Mir geht es "nur" um die Einbindung einer generellen externen Funktion, wenn das mal funktioniert, sollte die Anpassung kein Problem sein.
Evtl. kannst du mir die Files über PN zukommen lassen.
Danke für deine Bemühungen und beste Grüße, Jonny
TOP    
Beitrag 03.02.2021, 08:32 Uhr
ramoon
ramoon
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 03.02.2021
Beiträge: 5

Hallo Zusammen!

Dieser Beitrag ist schon etwas länger her, aber evtl. wird es noch verfolgt.
Ich bin nämlich auch auf die Problematik gestoßen und komme da nicht weiter.
Allerdings möchte ich die Funktion für HMI Embedded kompilieren.

Über einen Beispielprojekt würde ich mich sehr freuen.

Danke
Roman
TOP    
Beitrag 03.02.2021, 09:22 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo Roman,

was möchtest du denn erreichen?

Geht es dir nur um einen Dialog oder musst/willst du die FCT-Funktion benutzen?

Dafür habe ich die Funktionalität mittlerweile auf einer HMI-Advanced zum Laufen gebracht und auch ein entsprechendes
CPP-Projekt in VS2019.

Gruß,
Philipp
TOP    
Beitrag 10.02.2021, 08:30 Uhr
ramoon
ramoon
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 03.02.2021
Beiträge: 5

ZITAT(inselking @ 03.02.2021, 08:22 Uhr) *
Hallo Roman,

was möchtest du denn erreichen?

Geht es dir nur um einen Dialog oder musst/willst du die FCT-Funktion benutzen?

Dafür habe ich die Funktionalität mittlerweile auf einer HMI-Advanced zum Laufen gebracht und auch ein entsprechendes
CPP-Projekt in VS2019.

Gruß,
Philipp


Hallo Phillip,

ich möchte eine FCT-Funktion benutzen. Ich habe es in VS2008 mit Standarteinstellungen kompiliert, und eine Maske erstellt. Es macht auch irgendwas, allerdings was Falsches. Ich kann leider das Verhalten nicht nachvollziehen. Ich schätze, dass die DLL unter Windows laufen würde, aber auf HMI Embedded (NCU-Linux) bekomme ich es nicht hin.

Gruß Roman
TOP    
Beitrag 10.02.2021, 09:04 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo Roman,

leider ist das Testen etwas schwierig. Ich habe mir die ganze Sache erstmal in SinuTrain (kostenlose Version) aufgebaut. Da habe ich mir in die .dll an jeder markanten Stelle eine MessageBox eingebaut, die unter SinuTrain unter Windows dann auch angezeigt wird. Je nachdem, welche Messageboxes angezeigt wurden, konnte ich nachvollziehen, welcher Weg in der .dll ausgeführt wird.

Nachdem ich das Ding zum Laufen gebracht hatte, hat es auch auf der HMI geklappt. Aber wie gesagt, es war kein Embedded HMI. Ich habe aber letztens gelernt, dass auf der Embedded Dateinamen nur maximal 8 Zeichen vor dem Punkt haben dürfen und Buchstaben im Dateinamen müssen Kleinbuchstaben sein, sonst findet die Steuerung Dateien manchmal nicht.

Hilft dir das erstmal weiter?

Gruß,
Philipp
TOP    
Beitrag 10.02.2021, 11:46 Uhr
ramoon
ramoon
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 03.02.2021
Beiträge: 5

Danke Philip!

Ich versuche das mal auf SinuTrain mit Messageboxes.

Ich habe mal probeweise die DLL-Datei auf unter 8 Zeichen gekürzt. Leider bei gleichbleibendem Ergebnis.

Gruß Roman
TOP    
Beitrag 11.02.2021, 07:29 Uhr
ramoon
ramoon
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 03.02.2021
Beiträge: 5

Hallo Philipp,

in SinuTrain funktioniert die FCT problemlos - leider nicht auf der NCU.
Das Auskommentieren von
QUELLTEXT
__declspec(dllexport)
sowie das Kürzen des DLL-Dateinamens auf <=8 Zeichen brachte leider nicht den gewünschten Erfolg.

Groß Roman
TOP    
Beitrag 22.03.2021, 12:34 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo Roman,

ja, ich habe jetzt auch wieder mit der FCT rumgespielt.

I.d.T. funktioniert bei mir das Aufrufen der .dll unter SinuTrain problemlos. Aber auf der "echten" Maschine gar nicht.

Ich habe die .dll direkt auf c:\ gespeichert, aber die Maschine findet die nicht. Ich weiß nicht warum und ich weiß auch nicht weiter...

Hast du mittlerweile etwas hinbekommen?

Gruß,
Philipp
TOP    
Beitrag 25.03.2021, 12:36 Uhr
ramoon
ramoon
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 03.02.2021
Beiträge: 5

ZITAT(inselking @ 22.03.2021, 12:34 Uhr) *

Hallo Philipp,

leider habe ich es nicht hinbekommen. Hatte mich mit Siemens Support in Verbindung gesetzt, aber noch keine Lösungsvorschläge erhalten.

Gruß Roman
TOP    
Beitrag 07.04.2021, 10:29 Uhr
inselking
inselking
Level 1 = IndustryArena-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 28.05.2004
Beiträge: 30

Hallo Roman,

so, bei mir läuft das jetzt einwandfrei.

Ich habe nun eine Dialogmaske, in der in ein Feld per Barcode-Scanner der Barcode einer Laufkarte gescannt werden kann. Nach Abschluss des Scans ruft der Dialog meine .dll-Datei auf und übergibt dabei die eingescannte Nummer der Laufkarte. Daraufhin macht die .dll-Funktion eine Abfrage an das ERP und gibt die zu der Laufkarte gehörige SN zurück an die Maschine. Diese gibt der Dialog zurück an das NC-Programm und dort kann damit z.B. markiert oder eine entsprechendes Protokoll geschrieben werden.
Das ganze funktioniert, egal, ob die .dll-Datei auf der Maschine oder bei uns auf dem Netzwerk liegt.
Wunderbar! Es war ein langer Weg, aber letztendlich erfolgreich.

Meine Lösung: die .dll-Datei muss in Visual C++ 2008 kompiliert werden. Mit Visual Studio 2019 (gleicher Code) funktioniert es nicht. Warum? Dafür bin ich zu wenig C++-Programmierer. Vielleicht kennt sich ja jemand damit aus und kann das mal ergründen. Ich würde lieber mit dem aktuellen VS arbeiten als mit einer 2008er Version....

Gruß,

Philipp
TOP    



1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: