Werte in eigenem Programm anzeigen

Ich hatte hier mal eine Geschichte, die via batch gelaufen ist und die registry nach den vorhandenen(!) Controllern durchsuchte.

In meinen persönlichen Nachrichten ist es nicht mehr.
Aber las mir Zeit.
Da gab es sogar ein Ergebnis.

Nachtrag:
Es gab dazu: Batch zur Portsuche

Vielleicht möchte sich @TriB ja mal kurz äussern, ob das funktioniert hat.
Wenn nicht, muss ich erstmal sehen, ob ich das noch irgendwo habe und frag die Eröffnung des Thread an.

Hallo zusammen,
ich habe jetzt noch nicht alles verstanden, was der TE genau vor hat.
Aber wenn die Arduinos dauerhaft am PC angesteckt sind und sich am selben Port befinden, werden sie i.d.R. auch wieder der identischen Portnummer zugewiesen.
Darüber hinaus kann man das im Gerätemanager auch ändern und die Portnummer selbst festlegen.

Daher könnte man dem Programm auf dem PC, eine Liste mit den auszulesenden Ports fest zuweisen.
Oder man durchläuft beim Start eine Schleife und sendet ein Zeichen an die Schnittstelle. Kommt nix passendes zurück, sucht man nach dem nächsten.

Den Part aus dem von @my_xy_projekt angesprochenen Batchlauf, kann man auch direkt in C# umsetzen:

Wobei man dann darauf achten sollte, dass beim Einsatz von Arduino-Klonen, die natürlich einen anderen Namen zugewiesen bekommen.

Hallo @TriB, danke für den interessanten Link, der ja bereits eine ganz ordentliche Reihe von Programmiersprachen abdeckt!

Mit Lazarus/FreePascal lassen sich ebenfalls recht einfach Gerätenamen und zugehörige aktive Ports aus der Windows-Registry auslesen. Ich habe einmal zur Ergänzung eine kleine Anwendung geschrieben, die diese Werte in eine Stringtabelle einliest:

image

Der relevante Teil zum Auslesen der Registry ist aus der "Synapse library for FreePascal"(http://synapse.ararat.cz/doc/help/synaser.html) abgeleitet:

procedure TForm1.ReadSerialFromRegistry;
var
  reg : TRegistry;
  l   : TStringList;
  n   : integer;
begin
  l   := TStringList.Create;
  reg := TRegistry.Create;
  ClearSerialTable;
  try
    reg.Access := KEY_READ;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('\HARDWARE\DEVICEMAP\SERIALCOMM\', false);
    reg.GetValueNames(l);
    for n := 0 to l.Count - 1 do
    begin
      SerialTable.RowCount := SerialTable.RowCount +1;
      SerialTable.Cells[0,n+1] := IntToStr(1+n);
      SerialTable.Cells[1,n+1] := Pchar(l[n]);
      SerialTable.Cells[2,n+1] := Pchar(reg.ReadString(l[n]));
    end;
  finally
    l.Free;
    reg.Free;
  end;
  SerialTable.AutoSizeColumns;
end;

Für (die wahrscheinlich wenigen :innocent:) Interessierten der komplette Sourcecode für den o.a. Serial Port Monitor (mit Lazarus-IDE Version #2.0.10 erstellt):

SerialPortMonitor.zip (127,5 KB)

Das \Device\ im Device-Namen kann man bei Bedarf natürlich auch noch einfach entfernen ...

Das ist aber nicht alles.
Du weisst damit noch nicht, ob da ein AVR dran hängt.
Und wenn Du weisst, das da sicher ein AVR dran ist, musst noch sehen, ob es der ist, den Du erwartest.
Und dann, ob der nicht durch irgendwas belegt ist.

Das ist nicht so tricky....

Mich interessiert ja mehr, nachdem das damals im Sand verlaufen ist, ob das an-/ab-/umstecken damals funktioniert hat und der AVR wieder gefunden wurde.

Moin @my_xy_projekt, klar. Wenn Du Deinen PC (und Dich selbst) "im Griff" hast, sollte Dir keine andere Anwendung den COM-Port wegschnappen ... :innocent:

Den nehm ich mal mit.
Man liest sich.

1 Like

Es lief so weit, dass es für mich gereicht hat :sweat_smile:
Es wurden nur noch ESP´s, Arduinos & Clone angezeigt. Wenn es ein einziger war, wurde dieser automatisch ausgewählt, waren es mehrere erschien eine Auswahl.
Habe mir dazu aus Deinem Code alles zusammen kopiert. Deinen Batch alleine habe ich so leider nicht zum laufen bekommen. Irgendwann habe ich es aus den Augen verloren :see_no_evil:

@ Topic:
Kann zwar rund 10 Programmiersprachen aber bei (Turbo) Pascal bin ich leider raus. Da kann ich keine Sachdienlichen Hinweise beisteuern :man_shrugging:t2:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.