Entwickler-Ecke
Sonstiges (.NET) - Schnittstelle SAP - Programmablauf WindowsForms/ConsoleApp
IsabelleZimmermann - Di 09.10.18 11:19
Titel: Schnittstelle SAP - Programmablauf WindowsForms/ConsoleApp
Hallo nochmal,
ich hab noch Schwierigkeiten mit dem Programmablauf der Maschinen-Schnittstelle.
Beim ersten Mal sollen die beiden Funktionen Z_SDMACH__REQUEST4_NIE_ALU1() und FehlerRueckmeldung_SAP() aufgerufen werden. Die erste Funktion stellt die Verbindung zu SAP her und stellt die Parameter für die Maschine zur Verfügung, sodass die Maschine weiß, was zu tun ist. Falls die Länge des Werkstücks zu klein ist, wird ein Fehler gesetzt. Dieser soll dann an SAP zurückgemeldet werden.
Anschließend ruft der Werker die WindowsFormsApp1 auf mit den verschiedenen Maschinenparametern und der Sprache zum Einstellen (voreingestellt Tschechisch).
Nachdem er die Maschine gestartet hat und auf den Button zur Ermittlung der Anzahl an Bearbeitungsschritten (Anzahl Fräsen/Bohren/Sägen) gedrückt hat, und wenn die Maschine fertig ist, soll wieder die ConsolenApp aufgerufen werden. Diesmal sollen die Funktionen Maschine_Arbeitet(), Maschine_Stoppt() sowie Anzahl_Saeg_Bohr_fraes und Statusmeldung_SAP mit Maschine_Fertig aufgerufen werden.
Wenn Maschine stoppt, wird nur die Funktion Maschine_Stoppt() aufgerufen.
Meine Frage ist nun, wie ich die verschiedenen Funktionsaufrufe hin bekomme, ohne dass der Werker das jedes Mal im Code auskommentieren/einkommentieren muss?
Hier ist der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public static void Main(string[] args) { Console.WriteLine("\nHier ist StepByStepClient"); SAP.Middleware.Connector.Examples.StepByStepClient.Z_SDMACH__REQUEST4_NIE_ALU1(); SAP.Middleware.Connector.Examples.StepByStepClient.Maschine_Arbeitet(); SAP.Middleware.Connector.Examples.StepByStepClient.Maschine_Stoppt(); SAP.Middleware.Connector.Examples.StepByStepClient.Anzahl_Saeg_Bohr_Fraes(); SAP.Middleware.Connector.Examples.StepByStepClient.FehlerRueckmeldung_SAP(); Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); } |
Moderiert von Th69: C#-Tags hinzugefügt
Moderiert von Th69: Topic aus C# - Die Sprache verschoben am Di 09.10.2018 um 11:49
Th69 - Di 09.10.18 11:58
Soll denn jedesmal wieder eine neue Instanz der Konsolen-App aufgerufen werden (oder eine laufende wieder aktiviert werden)?
Bei ersterem würde es sich anbieten, mittels Kommandozeilenparametern (also über args) die verschiedenen Programmabläufe umzusetzen (z.B. CONNECT, WORK, ...).
Aber warum gibt es überhaupt 2 verschiedene Apps?
PS: Bitte demnächst selber hier im Forum die Code-Tags (Leiste "Bereiche") benutzen, danke.
IsabelleZimmermann - Di 09.10.18 12:05
Ja, es soll wieder eine neue Instanz der Konsolen-App aufgerufen werden.
Kannst du ein Beispiel zeigen, wie die Umsetzung über Kommandozeilen-Parameter, args, erfolgen kann?
Vielen Dank.
Es gibt 2 verschiedene Apps um die Werkstückparameter von SAP aufzurufen und die WindowsFormsApp soll zur Übersicht und zur Interaktion des Werkers mit der Oberfläche dienen.
Vielleicht kann ich die beiden Apps auch noch vereinfachen in eine App, weiß aber noch nicht wie.
lapadula - Di 09.10.18 12:52
Du kannst Argumente folgendermaßen übergeben:
C#-Quelltext
1:
| System.Diagnostics.Process.Start(@"C:\Users\myComputer\Documents\Visual Studio 2015\Projects\TestConsoleApplication\TestConsoleApplication\bin\x86\Debug\TestConsoleApplication.exe", "Eins Zwei Drei"); |
In deiner anderen Konsolenanwendung, wo du die Argumente verwenden möchtest, kannst du in der main Methode diese z. B. folgendermaßen auslesen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| static void Main(string[] args) { foreach (string item in args) { Console.WriteLine(item); } Console.ReadLine(); } |
Th69 - Di 09.10.18 13:22
Aber nicht mit hart-kodierten Pfaden aufrufen!
IsabelleZimmermann - Di 09.10.18 13:39
Die Eingabe der ersten Zeile funktioniert bei mir nicht.
Es werden folgende Fehler angezeigt:
Zitat: |
Typ erwartet
Das Tupel muss mindestens 2 Argumente enthalten
)erwartet
ungültiges Token "Pfad" in Klassen-, Struktur- oder Schnittstellenmemberdeklaration
|
Moderiert von Th69: Quote-Tags hinzugefügt
lapadula - Di 09.10.18 14:05
Dir fehlt das @-Zeichen vor deinem Pfad, siehe mein Beispiel.
Alternativ kannst du doppelte Back-Slash-Zeichen benutzen \\
Th69 - Di 09.10.18 14:07
@Isabelle: Vergleiche noch mal genau den Code mit dem geposteten Code (da ist nichts von einer eigenen class zu sehen).
IsabelleZimmermann - Di 09.10.18 14:37
Wo kommt denn der Befehl hin?
Innerhalb des namespace oder oberhalb davon?
Ich habe ihn jetzt oberhalb vom namespace davon platziert, aber es erscheint noch die Fehlermeldung, dass ) fehlt.
"Start" wird rot unterstrichen dargestellt und es erscheint folgende Fehlermeldung:
Zitat: |
Member, wie zum Beispiel Felder oder Methoden, können nicht direkt in einem Namespace enthalten sein. |
Moderiert von Th69: Quote-Tags hinzugefügt
Th69 - Di 09.10.18 14:49
Sorry, aber das sind nun wirklich einfachste Grundlagen.
Du willst doch die Konsolen-App bei einem Button-Klick (innerhalb der WinForms-Anwendung) aufrufen? Also wohin gehört wohl dann dieser Code?
IsabelleZimmermann - Di 09.10.18 15:39
Danke.
Es funktioniert.
IsabelleZimmermann - Mi 10.10.18 16:13
Hallo,
nun habe ich folgendes Problem:
Ich habe eine weitere KonsolenApp angelegt, welche durch einen weiteren ButtonClick in der WindowsForms geöffnet werden soll.
Im neuen Projekt wird jetzt aber Examples in der Direktive
SAP.Middleware.Connector.Examples nicht gefunden.
Ich verstehe das nicht.
Bitte um Hilfe.
Moderiert von Th69: C#-Tags hinzugefügt
Th69 - Mi 10.10.18 16:26
Wie hast du denn SAP.Middleware.Connector.Examples bei deiner ersten Konsolen-App eingebunden (direkt die "StepByStepClient.cs"-Datei oder aber die Assembly zum Projekt hinzugefügt)?
Wenn es aber dein eigener Code ist (wie in deinem Code aus deinem Eingangsbeitrag vermutet), dann mußt du selbstverständlich den dort verwendeten Namensbereich (namespace) benutzen.
IsabelleZimmermann - Mi 10.10.18 16:39
Ja, das versuche ich doch.
Aber wenn ich am Anfang der Datei
using SAP.Middleware.Connector.Examples eingebe, erscheint auch ein Fehler.
Moderiert von Th69: C#-Tags hinzugefügt
IsabelleZimmermann - Mi 10.10.18 16:41
Vielleicht muss ich auch einen Assembly-Verweis machen?
IsabelleZimmermann - Mi 10.10.18 16:46
Wenn ja, wie mache ich einen Assembly-Verweis?
IsabelleZimmermann - Mi 10.10.18 17:06
Ich hab das Problem jetzt selbst gelöst.
Ich war in der falschen Datei. Bin jetzt in die main-Methode von StepByStepClient.cs
IsabelleZimmermann - Mi 10.10.18 17:10
Jetzt hab ich ein neues Problem:
Zitat: |
Beschreibung
Fehler CS5001 Das Programm enthält keine als Einstiegspunkt geeignete statische Main-Methode. |
Moderiert von Th69: Quote-Tags hinzugefügt
Th69 - Mi 10.10.18 17:16
Bitte befasse dich erst mit den Grundlagen, d.h. suche selbständig im Internet nach den Fehlern und nur wenn du da nicht weiterkommst, dann melde dich hier.
Ich empfehle dir daher das OpenBook
Visual C# 2012 [
http://openbook.rheinwerk-verlag.de/visual_csharp_2012/] (hierfür also Kapitel "17 Projektmanagement und Visual Studio 2012") - auch wenn 2012 schon ein wenig her ist, aber die Grundlagen haben sich nicht geändert.
Daher sperre ich jetzt dieses Thema für 24h.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!