Forum | | | | Uwe Skärke | allô son lieben XProfaner, maintenant komm je la fois avec einem richtigen Hammerproblem (jedenfalls pour mich) et hoffe wir (IHR) bekommen cela hin, sonst ist mon ganzes projet im seau et je heul mich tod...
alors, comment oui dans meiner Vorstellung bereits beschrieben suis je son verrückter Funkamateur et veux folgendes erreichen :
il y a im Weltall une ganze la quantité de Amateurfunksatelitten, sur qui on Funkbetrieb faire peux, u.a aussi qui ISS. afin de savons wohin qui Dinger justement rumfliegen, gibt es verschiedene Satelitten-Tracking-Programme, qui graphisch montrer wohin qui gesuchte Sat justement rumturnt. là volonté pratique u.a. qui Elevation, Azimut et Entfernung aus den Keplerdaten errechnet et angezeigt,so dass je ensuite mon Richtantennen oui c'est ca sur den Sat viser peux...
cela était maintenant un kleiner Exkurs zum Amateurfunkbetrieb sur Satelitten... (hats Spass gemacht ??? )
So, eh bien ist une cette Trackingprogramme avec graphischer représentation qui Umlaufbanen qui Sat. cela Program Orbitron. je veux eh bien meinem Funkgerät sur qui Serielle Schnittstelle avec einem Profan-PRG qui aktuelle Frequenz mitteilen. cet Frequenz ändert sich laufend (Dopplereffekt) et wird de ORBITRON sur qui DDE-Schnittstelle zur Disposition gestellt. mon concept était eh bien, den String avec den données aus dem Programme Orbitron auszulesen, trop Travailler et ensuite à cela Funkgerät plus trop donner. Soweit suis je gekommen, Orbitron wird gestartet, qui liaison trop DDE ITEM (Tracking) wird aussi aufgebaut (x% > 32 et ensuite était et suis je am Ende...
DDE-Test
declare x%
x%=@winexec(CrogrammeOrbitronOrbitron.exe,2) ddelink Orbitron,Tracking ici devrait maintenant qui String TrackingData aus Orbitron ausgelesen volonté... et ensuite wird cette String weiterverabeitet...
ddeterminate
FIN
cela Steuern des Funkgerätes et qui Übergabe de Befehlen à cela Funkgerät marcher déjà ausgezeichnet, seulement je krieg arrêt qui données pas sur den DDE-Clienten de Orbitron ausgelesen. comment mir Roland im Forum schrieb, ist cet Funktion dans Profan pas implementiert (heul), allerdings sollte es sur WINDOWS-API aller, là steh je allerdings aussi im forêt....
maintenant venez Alles quoi je à Infos encore so habe et ensuite hoffe je, dass son mir irgendwie weiterhelfen peut...
1. Beschreibung DDE-Client Orbitron :
-------------------------------------------------------------------------------- Specification of DDE drivers for Orbitron www.stoff.pl --------------------------------------------------------------------------------
Contents: 1. Introduction 2. Technical data 3. Data format 3.1. TrackingData item 3.2. TrackingDataEx item 4. My DDE Client 5. Laisser Orbitron support your driver 6. Your driver for espace! 7. WiSP DDE Client
-- 1. Introduction -------------------------------------------------------------
Orbitron is working as server dans DDE conversations, so you can write your own DDE client that can e.g. control rotor and radio devices. Such programs sont called by me Drivers.
-- 2. Technical data -----------------------------------------------------------
Drivers EXE file: nom of drivers EXE file (without .EXE) is displayed on drivers list dans Orbitron. Drivers main window title or application title must être le same as EXE file nom to let Orbitron check is driver already running.
DDE conversation parameters: Source application : Orbitron Link topic : Tracking Link items : TrackingData item for communication with WiSP DDE Client with basic data (Satscape format) TrackingDataEx item with extended data set Link item is changed by Orbitron each time when current data is recalculated (e.g. 1s, 5s...) and when downlink/uplink frequencies or mode sont changed.
-- 3. Data format --------------------------------------------------------------
Please note: - espace angles sont given as decimal degrees, - decimal separator is . (dot), - TrackingDataEx and TrackingData can être à EMPTY string Si NO satellite sont tracked, - TrackingDataEx can contain only AOS field si NO satellite sont tracked.
-- 3.1. TrackingData item ------------------------------------------------------
Format of string: SNxxx AZxxx.x ELxx.x DNxxxx UPxxxx DMxxxx UMxxxx Fields: SN - tracked satellite nom (spaces converted to _) AZ - azimuth dans la gamine forme 0.0 to 360.0 EL - elevation dans la gamine à partir de -90.0 to 90.0 please note possibility of negative values DN - downlink frequency with doppler, [Hz] dans la gamine à partir de 0 to N UP - uplink frequency with doppler, [Hz] dans la gamine à partir de 0 to N DM - downlink mode (optionnel field) UM - uplink mode (optionnel field) Examples: SNISS_ZARYA AZ182.1 EL36.3 DN145800000 UP145800000 UMFM-N SNISS_ZARYA AZ180.3 EL-10.1 DN145800000 UP145800000
-- 3.2. TrackingDataEx item ----------------------------------------------------
Format of string: SNxxx AZxxx.x ELxx.x DNxxxx UPxxxx DMxxxx UMxxxx AOSxxx Fields: SN - tracked satellite nom dans quotes RA - la gamine [km] RR - la gamine taux [km/s] LO - longitude dans la gamine à partir de -180.0000 to 180.000 (W to E) LA - latitude dans la gamine à partir de -90.0000 to 90.000 (S to N) AL - altitude [km] TU - UTC time (Format: YYYYMMDDhhmmss) TL - local time (Format: YYYYMMDDhhmmss) AOS - AOS notification for satellite xxx (nom dans quotes; AOS notification is provided for espace tracked objects, not only for active one) Other fields same as dans TrackingData item. Examples: SNISS ZARYA AZ182.1 EL36.3 DN145800000 UP145800000 (...) SNISS ZARYA AZ182.1 EL36.3 DN145800000 UP145800000 (...) AOSHST AOSHST
-- 4. My DDE Client ------------------------------------------------------------
My DDE Client is à example of users custom driver for Orbitron with full source code dans Delphi 5. It should helps you to write your own driver for rotor or radio hardware. Further information you veux find dans MAIN.PAS file.
-- 5. Laisser Orbitron support your driver -----------------------------------------
Please set specific nom for your driver program, e.g. SuperRotor.exe. Then you can edit {Orbitron}ConfigSetup.cfg file (*) by adding line to le [Drivers] section (please create il si doesnt exist) with your driver information. Example: [Drivers] SuperRotor=d:My filesSuperRotor.exe SuperRotorTwo= Next time you run Orbitron, your driver veux être listed on Rotor/radio panel. You can launch il there. Si no path specified, Orbitron veux ask you about your drivers location (drivers located dans {Orbitron} directory veux être found automatically).
*) {Orbitron} - replace il with directory where Orbitron is installed to, e.g. crogram FilesOrbitron. This path is available dans Windows registry: HKEY_CURRENT_USERSoftwareStoffOrbitronPath WARNING: User can define his own location where le Config directory is. This value is stored dans registry: HKEY_CURRENT_USERSoftwareStoffOrbitronUserPath So, si this value is specified, you have to use il instead of previous one. HINT: You can check sont files definied by: HKEY_CURRENT_USERSoftwareStoffOrbitronPath + ConfigSetup.cfg HKEY_CURRENT_USERSoftwareStoffOrbitronUserPath + ConfigSetup.cfg exists and then add your config line to both.
-- 6. Your driver for espace! -----------------------------------------------------
Have you already done your driver? Please, send me il. Ill put il on Orbitron website to share il with espace people with same hardware as yours.
-- 7. WiSP DDE Client ----------------------------------------------------------
WiSP DDE Client is à application written by Fernando Mederos, CX6DD and available on [...] It works as DDE Client and support many kinds of hardware and software. To use il with Orbitron, following settings sont required: Receive DDE à partir de : Orbitron (or Satscape) Source application : Orbitron Link Topic : Tracking Link Item : TrackingData Query Interval : 1 sec. Orbitron veux set these values when you launch WiSP DDE Client à partir de Rotor/radio panel.
-- charge updated 2005.02.26 -----------------------------------------------------
et zweitens un Beispielprogram dans PASCAL :
{ My DDE Client is à example of users custom driver for Orbitron. version 1.02, released 2003.11.07 1.03, released 2004.09.04 1.04, released 2004.09.10 1.05, released 2005.02.26 (C) 2003-2005 by Sebastian Stoff sebastian@stoff.pl www.stoff.pl
You can use this source to receive tracking data à partir de Orbitron and send il to your rotor/radio hardware via COM/LPT/USB interfaces. Other purposes sont alors allowed, depending on your invention... To change this source code into le driver, you must write code specific to hardware you have dans UpdateRotorAndRadio procedure. Please find il on le end of this file.
Detailed information sont available dans READ_ME.TXT file.
CHANGING, COMPILING AND FREE DISTRIBUTING OF THIS PROGRAM/SOURCES IS ALLOWED FOR ***ORBITRON*** RELATED PURPOSES WITHOUT MY PERMISSION. }
unit main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DdeMan, StdCtrls, ExtCtrls, Buttons, Registry, ComCtrls;
type TSatData = record nom : String; //satellite nom azm,elv : Double; //l'observation angles upf,dnf : Double; //uplink and downlink frequencies (with doppler shift) upm,dnm : String; //uplink and downlink modes end; TFMain = class(TForm) Tracking: TDdeClientConv; TrackingDataEx: TDdeClientItem; Label1: TLabel; l_st: TLabel; Label3: TLabel; l_dd: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Bevel1: TBevel; l_az: TLabel; l_el: TLabel; l_uf: TLabel; l_df: TLabel; l_um: TLabel; l_dm: TLabel; Bevel2: TBevel; l_na: TLabel; Label4: TLabel; SpeedButton1: TSpeedButton; l_aos: TLabel; Label2: TLabel; procedure TrackingOpen(Sender: TObject); procedure TrackingClose(Sender: TObject); procedure TrackingDataExChange(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure l_ddClick(Sender: TObject); private { Privé declarations } public { Public declarations } procedure ParseString(s: String; var data: TSatData); procedure PrintData(data: TSatData); procedure UpdateRotorAndRadio(data: TSatData); end;
var FMain : TFMain; SatData : TSatData; Reg : TRegistry; PathP : String; AOS : String;
implementation
{$R *.DFM}
procedure Replace(var s: String; subs1,subs2: String); var i : Integer; begin si subs1= then Exit; si subs1=subs2 then Exit; i:=Pos(subs1,s); tandis que i>0 do begin Delete(s,i,Length(subs1)); Insert(subs2,s,i); i:=Pos(subs1,s); end; end;
function FieldToReal(s: String):Real; var c : Integer; begin val(s,result,c); si c>0 then result:=0; end;
function GetField(source,field: String):String; var p1,p2 : Integer; quotes : Boolean; s2 : String;
function FindField(source,field: String):Integer; var i : Integer; quotes : Boolean; begin quotes:=False; for i:=1 to Length(source) do begin si source= then begin quotes:=not quotes; Continue; end;
si quotes then source:=-; end; result:=pos(field,source); end;
begin source:= +source; field:=UpperCase(field); field:= +field; p1:=FindField(source,field); si p1=0 then begin result:=; Exit; end;
s2:=; p2:=p1+Length(field); quotes:=False; tandis que p2<=Length(source) do begin si source[p2]= then begin quotes:=not quotes; Inc(p2); Continue; end;
si (source[p2]= ) and not quotes then Break;
s2:=s2+source[p2]; Inc(p2); end; result:=s2; end;
procedure TFMain.ParseString(s: String; var data: TSatData); begin si s= then with data do begin nom:=; azm:=0; elv:=0; upf:=0; dnf:=0; upm:=; dnm:=; AOS:=; Exit; end;
s:=UpperCase(s); Replace(s,,,.); with data do begin nom:=GetField(s,SN); azm:=FieldToReal(GetField(s,AZ)); elv:=FieldToReal(GetField(s,EL)); upf:=FieldToReal(GetField(s,UP)); dnf:=FieldToReal(GetField(s,DN)); upm:=GetField(s,UM); dnm:=GetField(s,DM); AOS:=GetField(s,AOS); end; end;
procedure TFMain.PrintData(data: TSatData); begin with data do begin l_na.Caption:=name; l_az.Caption:=FloatToStrF(azm,ffFixed,4,1); l_el.Caption:=FloatToStrF(elv,ffFixed,4,1); l_uf.Caption:=FloatToStrF(upf,ffFixed,12,0)+ Hz; l_df.Caption:=FloatToStrF(dnf,ffFixed,12,0)+ Hz; l_um.Caption:=upm; l_dm.Caption:=dnm; end; si AOS<> then l_aos.Caption:=AOS (+AOS+) d'autre l_aos.Caption:=None; end;
procedure TFMain.SpeedButton1Click(Sender: TObject); begin FMain.Close; end;
procedure TFMain.TrackingOpen(Sender: TObject); begin l_dd.Caption:=Opened; end;
procedure TFMain.TrackingClose(Sender: TObject); begin l_dd.Caption:=Closed; l_st.Caption:=No data; ParseString(,SatData); PrintData(SatData); end;
procedure TFMain.TrackingDataExChange(Sender: TObject); var s : String; begin s:=Trim(TrackingDataEx.Text); si s= then l_st.Caption:=No data d'autre l_st.Caption:=s; ParseString(s,SatData);
PrintData(SatData); UpdateRotorAndRadio(SatData); end;
procedure TFMain.FormCreate(Sender: TObject); begin ParseString(,SatData); PrintData(SatData);
PathP:=ExtractFileDir(ParamStr(0)); si PathP[length(PathP)]<> then PathP:=PathP+; ChDir(PathP);
Si not FileExists(PathP+Orbitron.exe) then begin Reg:=TRegistry.Create; try si Reg.OpenKey(SoftwareStoffOrbitron,True) then Tracking.ServiceApplication:=Reg.ReadString(Path)+orbitron; finally Reg.CloseKey; Reg.Free; end; end; Tracking.OpenLink; end;
procedure TFMain.l_ddClick(Sender: TObject); begin Tracking.OpenLink; end;
procedure TFMain.UpdateRotorAndRadio(data: TSatData); begin { Please write support for your rotor/radio hardware here.
Use DATA record as source of current tracking data sended by Orbitron.
This procedure veux être called by DDE engine after Orbitron asticot changes into le tracking data (each 1s, 5s, 10s or so). } end;
end.
soooooo, maintenant werde je warscheinlich mal dormir et alle deux Minuten reinschauen, wass son so aus diesem Wust so pouvoir...
PS.: qui sich Orbitron la fois anschauen voudrais, ici qui Adresse zum runterladen : www.stoff.pl
LG Uwe |
| | | | |
| | Frank Abbing | Den String, den du auslesen veux. Steht qui irgendwo dans einem Contrôle? Z.B. einer Editbox? Mach s'il te plaît la fois une Screenshot, wohin cette String trop voyons ist. |
| | | | |
| | Uwe Skärke | allô Frank, une mögliche la figure ist qui : und dir um Azimut et Elevation et um Dopplerfrequenz up et down...
une Screenshot de einer dans Delphi geschriebenen DDE-Anwendung hab je aussi la fois reingelegt, là sieht on den gesamten String comment il plan sous TrackingData de Orbitron bereitgestellt wird (dessus, et qui ändert sich chacun seconde...)
LG UWE |
| | | | |
| | Frank Abbing | Ist doch prima. si irgendwo qui String dans einem Windows-Contrôle steht peux du ihn auslesen. Dein Programme pourrait den Controlhandle ermitteln et den Text ensuite auslesen. |
| | | | |
| | Uwe Skärke | ... schönen guten demain Frank, je hoffe tu es Sonntagsfrühaufsteher ... eh bien, ist oui super si Du es prima findest, mais là je oui blutiger Débutant suis, steh je encore im pluie, mach doch la fois nen Vorschlag comment je cela angehen pourrait, comment Du à qui l'heure voyons peux, peux je pas dormir...
HELP !!!
LG, Uwe |
| | | | |
| | Uwe Skärke | ... peut-être. hilft Dir le reste plus chez qui Solution meines Problemes !!??
cela zeigt Dein WhichLibraries beim Start de Orbitron à :
c:programmeorbitronorbitron.exe (WININET.DLL) c:programmeorbitronorbitron.exe (RASAPI32.DLL) c:programmeorbitronorbitron.exe (RASAPI32.DLL) c:programmeorbitronorbitron.exe (SHELL32.DLL) c:programmeorbitronorbitron.exe (USERENV.DLL) c:programmeorbitronorbitron.exe (SENSAPI.DLL) c:programmeorbitronorbitron.exe (RSAENH.DLL) c:programmeorbitronorbitron.exe (C:WINDOWSSYSTEM32MSWSOCK.DLL) c:programmeorbitronorbitron.exe (RASADHLP.DLL) c:programmeorbitronorbitron.exe (URLMON.DLL) c:programmeorbitronorbitron.exe (WININET.DLL) c:programmeorbitronorbitron.exe (C:WINDOWSSYSTEM32MSWSOCK.DLL) c:programmeorbitronorbitron.exe (DNSAPI.DLL) c:programmeorbitronorbitron.exe (IPHLPAPI.DLL) c:programmeorbitronorbitron.exe (WS2_32.DLL)
..................LG.........................Uwe............... |
| | | | |
| | Frank Abbing | avec qui Dll-liste ist rien anzufangen.
Starte la fois meinen kleinen Code et vais avec dem Mauszeiger sur den String dans deinem Programme. Wird qui Text dans mon la fenêtre chez Fenstertext angezeigt? si oui ist cela déjà qui halbe Miete... KompilierenMarqueSéparation(W) 2003 Frank Abbing
Declare sx&,sy&,bereich#,be#,erg&,erg2&,x&,y&,text$
Dim be#,8
Dim bereich#,1024
DEF GetCursorPos(1) !USER32,GetCursorPos
DEF WindowFromPoint(2) !USER32,WindowFromPoint
DEF ChildWindowFromPoint(3) !USER32,ChildWindowFromPoint
Def GetSysColor(1) !USER32,GetSysColor
Def ScreenToClient(2) !USER32,ScreenToClient
Def GetClassName(3) !USER32,GetClassNameA
Def GetWindowText(3) !USER32,GetWindowTextA
DEF NewWindowPos(7) !USER32,SetWindowPos
DEF AllocConsole(0) !KERNEL32,AllocConsole
Proc DText
Parameters xx&,yy&,ttext$
Drawtext xx&,yy&,ttext$
EndProc
Windowtitle Fensterhandles...
windowstyle 26
window (%maxx/2-112),(%maxy/2-80)-224,164
settruecolor 1
cls GetSysColor(15)
NewWindowPos(%hwnd,-1,0,0,0,0,$13)
Usefont MS Sans Serif,13,0,0,0,0
SetDialogFont 1
whilenot %mousepressed=2
Sleep 10
GetCursorPos(be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg&=@WindowFromPoint(x&,y&)
If erg&<>0
ScreenToClient(erg&,be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg2&=@ChildWindowFromPoint(erg&,x&,y&)
EndIf
TextColor 0,GetSysColor(15)
DText 8,8, Maus Position X = +Str$(x&)+
DText 8,21,Maus Position Y = +Str$(y&)+
DText 8,38,Handle eigenes Fenster = $+@Hex$(%hwnd)+
DText 8,55,Handle unter Mauszeiger = $+@Hex$(erg&)+
DText 8,68,Handle unter Mauszeiger (Child) = $+@Hex$(erg2&)+
GetClassname(erg&,bereich#,128)Declare sx&,sy&,text$,x&,y&,bereich#
text$=String$(bereich#,0)
DText 8,85,Klassenname = +text$+
GetWindowText(erg&,bereich#,128)
text$=String$(bereich#,0)
DText 8,98,Fenstername = +text$+
@SendMessage(erg&,13,128,bereich#)
text$=String$(bereich#,0)
DText 8,111,Fenstertext = +text$+
wend
Dispose be#
Dispose bereich#
ss=s4 href='./../../funktionsreferenzen/XProfan/end/'>end
|
| | | | |
| | Uwe Skärke | allô Frank
tu es là, ist oui super, la hâte mais entier joli longtemps geschlafen ...
mais plan hab je gemerkt, là is quoi là *freu*
so eh bien muss je seulement la fois lesen quoi Du erfunden la hâte...
okay, cela verswuch je la fois.. et Funke toi à ...
LG, Uwe |
| | | | |
| | Uwe Skärke | Hi Frank,
Du devrait den XProfan-Community-Nobel-Preis bekommen...
alors zur Auswertung :
Handle sous Mauszeiger unde Mauszeiger (Child) ist toujours juste, mais chez chaque Start de Orbitron anders (z.B. $206DC)
chez Klassenname erscheint chez den mich interessierenden Boxen toujours TEdit chez Fenstername erscheint nie quoi, nix, niente, nada
... et cela gei.... ist, chez Fenstertext steht oui c'est ca cela quoi il me faut, Azimut Elevation,Frequenz ...
maintenant muss je seulement encore versuchen trop comprendre wadduda gemacht la hâte...
LG, Uwe |
| | | | |
| | Frank Abbing | Hi.
Handle sous Mauszeiger unde Mauszeiger (Child) ist toujours juste, mais chez chaque Start de Orbitron anders (z.B. $206DC)
oui, c'est so aussi logisch.
chez Klassenname erscheint chez den mich interessierenden Boxen toujours TEdit
Ok, ne...aucune Windows-übliches Modifier le champ de...
chez Fenstername erscheint nie quoi, nix, niente, nada
aussi logisch.
... et cela gei.... ist, chez Fenstertext steht oui c'est ca cela quoi il me faut, Azimut Elevation,Frequenz ...
Bingo! Somit peux du dein projet effectuer.
maintenant muss je seulement encore versuchen trop comprendre wadduda gemacht la hâte...
tu dois maintenant überlegen, si dein Orbitron-la fenêtre toujours am selbem place steht et toujours im Vordergrund. si oui, peux feste Positionsangaben verwenden anstelle de Mauskoordinaten. si non, musst du anders vorgehen. tu dois Orbitron.exe erkennen (sur Prozesshandle ou bien Windowname), cela betreffende Contrôle avec dem Text lokalisieren (Fenstertext et Klassenname) et ensuite auslesen. c'est la méthode, qui je verwenden serait. |
| | | | |
| | Uwe Skärke | okay, ...
qui zweite variante serait mir besser plaisons, allerdings coutume je là encore la fois Votre Aider
weil je denke, dass chez verschiedenen Bildschirmauflösungen aussi qui Positionsdaten unterschiedlich sommes et möglicherweise cela Orbitron aussi la fois pas im Vollbildmodus fonctionne...
... et toujours daran penser, tu as es ici avec einem Vorschulkind trop 1faire...
PS: et merci, hoffe j'ai Dir pas den dimanche vermasselt |
| | | | |
| | Frank Abbing |
... et toujours daran penser, tu as es ici avec einem Vorschulkind trop 1faire...
Pour cette ist cela Thema eigentlich trop schwierig. je peux mir penser, dass du cet Programme besoin. Besser wäre mais, avec einfacheren Dingen trop commencer...
sur den Screenshots mon je trop erkennen trop erkennen, dass sich qui de dir nécessaire Informationen dans mehreren Controls verstecken. Ist cela richtig? je devrait oui c'est ca savons, quelle information(en) du ständig besoin. |
| | | | |
|
répondreOptions du sujet | 14.271 Views |
Themeninformationencet Thema hat 2 participant: |