Autor Beitrag
IsabelleZimmermann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 09.10.18 11:19 
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:
ausblenden 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.ExampleSimpleCall();
    //  SAP.Middleware.Connector.Examples.StepByStepClient.ExampleWorkWithStructuresAndTables();

    SAP.Middleware.Connector.Examples.StepByStepClient.Z_SDMACH__REQUEST4_NIE_ALU1();
    SAP.Middleware.Connector.Examples.StepByStepClient.Maschine_Arbeitet();
    SAP.Middleware.Connector.Examples.StepByStepClient.Maschine_Stoppt();
    /*
    if(SAP.Middleware.Connector.Examples.StepByStepClient.Maschine_Fertig()==1)
    {
        SAP.Middleware.Connector.Examples.StepByStepClient.Statusmeldung_SAP();
    }
    */

    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 user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Di 09.10.2018 um 11:49
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 09.10.18 12:34 
So etwas solltest du wohl selber aus dem Internet rausfinden können - aber hier zwei Links: Befehlszeilenargumente und Main Args Example.

Und beim Aufrufen der Konsolen-App dann den passenden Parameter mitgeben, s. z.B. Process.Start Examples (Stichwort: "Arguments").
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Di 09.10.18 12:52 
Du kannst Argumente folgendermaßen übergeben:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 09.10.18 13:22 
Aber nicht mit hart-kodierten Pfaden aufrufen!
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 user profile iconTh69: Quote-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Di 09.10.18 14:05 
Dir fehlt das @-Zeichen vor deinem Pfad, siehe mein Beispiel.
Alternativ kannst du doppelte Back-Slash-Zeichen benutzen \\


Zuletzt bearbeitet von lapadula am Di 09.10.18 14:20, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 user profile iconTh69: Quote-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Di 09.10.18 15:39 
Danke.
Es funktioniert.
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 10.10.18 16:41 
Vielleicht muss ich auch einen Assembly-Verweis machen?
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mi 10.10.18 16:46 
Wenn ja, wie mache ich einen Assembly-Verweis?
IsabelleZimmermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: 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 user profile iconTh69: Quote-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 (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.