Lok24
17.07.2019, 18:50

Editiert von
Lok24
17.07.2019, 19:10

Hilfe bei C# gesucht

Hallo,

ich probiere es nochmal, leider hat das letzte mal keiner angebissen....
Ich suche eigentlich nur die Syntax für genau einen Befehl.....

Grüße

Werner



Lok24
18.07.2019, 15:33

Als Antwort auf den Beitrag von Lok24

Editiert von
Lok24
18.07.2019, 15:41

Re: Hilfe bei C# gesucht

Hallo,

jetzt also hier weiter im Off-topic-Bereich.

Ich benutze das Programm "Brick Automation Project" zur Ansteuerung der PoweredUp-Hubs, es bildet das LEGO-BT-Protokoll ab.

Und so sieht das aus:

[image]



Und es funktioniert auch alles, gefällt mir aber nicht.

Wie man sieht sammelt es die erreichbaren (eingeschalteten) Hubs ein (links).

Dann kann man an zwei Stellen tätig werden:
Zu einen Event (Sensor 1 "rot") einen C# Schnipsel (rechtes
Fenster) schreiben. Und in einem Teil, des sich "Gobal Code" nennt, übergeordnete C- Routinen programmieren.
Läuft, auch bei mir.

Die "Objects" stehen im rechten Fenster ganz oben.

Ich schreibe also im Event (das "level" ausführen soll, aber die Hubs braucht):
progstart(Hub[0],Hub[1],Hub[2]);
level();

und im Global Code:
static void progstart(Hub L2, Hub M1, Hub L1 )
{
// set the Hubs
Lok1 = L1;
Lok2 = L2;
Motor1 = M1;

Dann kann ich z.B. mit Lok2.SetMotorSpeed("A",30) die Loks fahren.

Wo ist dann das Problem?
Nun, wenn die Einschaltsequenz noch ein anderes HUB findet (Austellungen(!)) geraten die Indizes außer Tritt.

Und ich muss dann auch ggf.
progstart(Hub[0],Hub[1],Hub[2],Hub[3]);
übergeben. Das ist nicht änderungsfreundlich, zumal ich diesen String für jeden Event und Programmschnipsel dann anpassen muss.

Aber: "Hub" ist nirgendwo definiert. Es muss also noch eine Stück C# geben, an das ich als User nicht drankomme, die eigentliche Funktionalität.
Und aus diesen Häppchen wird dann das Programm zusammengesetzt und ausgeführt.


Hub[0] kann ich im Global Code nicht nutzen
(Aber evtl "Hub"? Dann könnte ich mir das "progstart" sparen)

Ich würde also gerne das Objekt (?!??) "Hub" übergeben, also:
progstart(Hub);
oder etwa doch
progstart(Hub[]); ???
oder anders? oder gar nicht?

Und dann im Global Code die Länge/Anzahl Elemente dieses Arrays/dieser Liste in einer Schleife abarbeiten.

Ich hoffe das ist halbwegs verständlich.....?
Vielleicht kann man die Frage auch ohne Kenntnis der Black-Box "Hauptprogramm" gar nicht beantworten.

Jede Hilfe ist willkommen!

Grüße

Werner



cimddwc
18.07.2019, 16:11

Als Antwort auf den Beitrag von Lok24

Editiert von
cimddwc
18.07.2019, 16:12

Re: Hilfe bei C# gesucht

Hallo,

ich bin zwar kein C#-Experte (hab mehr mit C/C++ zu tun), aber die Übergabe von Arrays sollte mit
static void progstart(Hub[] hubs)
gehen, aufgerufen mit progstart(Hub); da drin kannst du dann hubs.length abfragen und mit hubs[0] etc. auf die einzelnen Elemente zugreifen.

Inwiefern das dann in dieser speziellen Umgebung auch geht, weiß ich nicht (mich wundert ja schon, dass "Hub" anscheinend sowohl eine Array-Variable als auch eine Klasse bezeichnet...).

Grüße,
Andreas



Andi
18.07.2019, 16:27

Als Antwort auf den Beitrag von Lok24

Re: Hilfe bei C# gesucht

Kannst du nicht ne Schleife laufen lassen, die alle vorhandenen Hubs anspricht? Oder vorher abfragen, wieviele Hubs vorhanden sind?

gruß
Andi



Lok24
18.07.2019, 17:25

Als Antwort auf den Beitrag von cimddwc

Re: Hilfe bei C# gesucht

Hallo Andreas, vielen Dank.

das ergibt das hier beim compilieren von "progstart(Hub);"

Error (CS1503): Argument '1': Konvertierung von 'System.Collections.Generic.List<LegoTrainProject.Hub>' in 'LegoTrainProject.Hub[]' nicht möglich.
Error (CS1998): In dieser Async-Method fehlen die 'await'-Operatoren, weshalb sie synchron ausgeführt wird. Sie sollten die Verwendung des 'await'-Operators oder von 'await Task.Run(...)' in Betracht ziehen, um auf nicht blockierende API-Aufrufe zu warten bzw. CPU-gebundene Aufgaben auf einem Hintergrundthread auszuführen.



Lok24
18.07.2019, 17:25

Als Antwort auf den Beitrag von Andi

Re: Hilfe bei C# gesucht

Andi hat geschrieben:

Kannst du nicht ne Schleife laufen lassen, die alle vorhandenen Hubs anspricht? Oder vorher abfragen, wieviele Hubs vorhanden sind?


Gerne. Wie?



Andi
18.07.2019, 18:51

Als Antwort auf den Beitrag von Lok24

Re: Hilfe bei C# gesucht

Lok24 hat geschrieben:

Andi hat geschrieben:
Kannst du nicht ne Schleife laufen lassen, die alle vorhandenen Hubs anspricht? Oder vorher abfragen, wieviele Hubs vorhanden sind?


Gerne. Wie?


Muss ich googlen. Hab zu lange nicht mehr mit C# programmiert, nur mit PHP



Lok24
18.07.2019, 18:59

Als Antwort auf den Beitrag von Andi

Editiert von
Lok24
18.07.2019, 19:22

Re: Hilfe bei C# gesucht

Andi hat geschrieben:


Muss ich googlen. Hab zu lange nicht mehr mit C# programmiert, nur mit PHP


das Problem ist doch: wenn ich nicht auf "Hub" zugreifen kann, wie bekomme ich dann die Länge (= Zahl der Elemente)?


v = hub.???????;
for (int i = 0; i < v; i++)
{
Console.WriteLine(Hub[i].DeviceId);
}



Mylenium
18.07.2019, 19:27

Als Antwort auf den Beitrag von Lok24

Re: Hilfe bei C# gesuchtn

Ich würd einfach eine statische Liste mit allen deinen DeviceIDs schreiben und dann daraus mit einem Check für isConnected() die eigentliche Hub Funktionalität generieren. Damit könntest du ja eine persistente Sortierung erzwingen, zumindest für die eigenen Devices. Andere Hubs würden dann hinten dran hängen. Wie man die dann dynamisch einbindet, erschließt sich mir aber auch nicht mangels Kenntnis des Systems.

Mylenium


https://myleniumsbrickcorner.wordpress.com


Andi
18.07.2019, 19:44

Als Antwort auf den Beitrag von Lok24

+1Re: Hilfe bei C# gesucht

Lok24 hat geschrieben:

Andi hat geschrieben:

Muss ich googlen. Hab zu lange nicht mehr mit C# programmiert, nur mit PHP


das Problem ist doch: wenn ich nicht auf "Hub" zugreifen kann, wie bekomme ich dann die Länge (= Zahl der Elemente)?


v = hub.???????;
for (int i = 0; i < v; i++)
{
Console.WriteLine(Hub[i].DeviceId);
}


for (int i=0; i < Hub[].length; i++) ?



Carrera124 gefällt das


cimddwc
18.07.2019, 20:42

Als Antwort auf den Beitrag von Lok24

Editiert von
cimddwc
18.07.2019, 20:44

Re: Hilfe bei C# gesucht

Beim ersten Fehler dann vielleicht doch mit progstart (Hub[]) versuchen?

Edit: Oder in der Deklaration der Funktion System.Collections.Generic.List<LegoTrainProject.Hub> hubs statt Hub[] hubs, weil's eben doch kein Array ist.

Ansonsten weiß ich erstmal auch nicht weiter.

Grüße,
Andreas



13 nachfolgende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen

Gesamter Thread: