Foro | | | | Uwe Skärke | ¡Hola ihr lieben XProfan, ahora komm Yo veces con un richtigen Hammerproblem (jedenfalls para mich) y hoffe wir (IHR) bekommen el hin, sonst es mein ganzes Projekt en el Eimer y yo heul mich tod...
Also, como sí en meiner Vorstellung ya beschrieben bin Yo son verrückter Funkamateur y voluntad folgendes erreichen :
Lo son en el Weltall una todo Menge de Amateurfunksatelitten, en uno Funkbetrieb hacer kann, u.a auch el ISS. Um a wissen wo el Dinger gerade rumfliegen, hay verschiedene Satelitten-Tracking-Programas, el graphisch zeigen wo el gesuchte Sat gerade rumturnt. Como voluntad praktisch u.a. el Elevation, Azimut y Entfernung de el Keplerdaten errechnet y adecuado,así dass Yo entonces mi Richtantennen genau en el Sat zielen kann...
Das war ahora una kleiner Exkurs para Amateurfunkbetrieb encima Satelitten... (hats Spass gemacht ??? )
So, nun es eins dieser Trackingprogramme con graphischer Darstellung el Umlaufbanen el Sat. el Program Orbitron. Yo voluntad nun mi Funkgerät en Serielle Schnittstelle con un Profano-PRG el aktuelle Frequenz mitteilen. Diese Frequenz ändert se laufend (Dopplereffekt) y se de ORBITRON en DDE-Schnittstelle disponible gestellt. Mi Concepto war nun, el String con el Daten de el Programa Orbitron auszulesen, a bearbeiten y luego a el Funkgerät más a geben. Soweit bin Yo gekommen, Orbitron se comenzó, el Verbindung a DDE ITEM (Tracking) se auch aufgebaut (x% > 32 y luego war y bin Yo al Ende...
DDE-Test
declarar x%
x%=@winexec(CrogrammeOrbitronOrbitron.exe,2) ddelink Orbitron,Tracking hier debería ahora el String TrackingData de Orbitron ausgelesen voluntad... y luego dieser String weiterverabeitet...
ddeterminate
FIN
Das Steuern des Funkgerätes y el Übergabe de Befehlen a el Funkgerät klappen ya ausgezeichnet, sólo Yo krieg sólo el Daten no encima el DDE-Clienten de Orbitron ausgelesen. Como me Roland en el Foro schrieb, es esta Función en Profano no implementiert (heul), allerdings debería lo encima WINDOWS-API ir, como steh Yo allerdings auch en el Wald....
Jetzt kommt Alles Yo a Infos todavía así habe y luego hoffe Yo, dass Ihr me irgendwie weiterhelfen könnt...
1. Descripción 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. Let Orbitron support your driver 6. Your driver for all! 7. WiSP DDE Client
-- 1. Introduction -------------------------------------------------------------
Orbitron is working as server en DDE conversations, así you can write your own DDE client that can e.g. control rotor and radio devices. Such programs are called by me Drivers.
-- 2. Technical data -----------------------------------------------------------
Drivers EXE file: Name of drivers EXE file (without .EXE) is displayed on drivers list en Orbitron. Drivers main window title or application title must be the same as EXE file name to let Orbitron check is driver already running.
DDE conversation parámetros: 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 are changed.
-- 3. Data format --------------------------------------------------------------
Please note: - all angles are given as decimal degrees, - decimal separator is . (dot), - TrackingDataEx and TrackingData can be a EMPTY cadena If NO satellite are tracked, - TrackingDataEx can contain only AOS field if NO satellite are tracked.
-- 3.1. TrackingData item ------------------------------------------------------
Formato of cadena: SNxxx AZxxx.x ELxx.x DNxxxx UPxxxx DMxxxx UMxxxx Fields: SN - tracked satellite name (spaces converted to _) AZ - azimuth en range form 0.0 to 360.0 EL - elevation en range from -90.0 to 90.0 please note possibility of negative values DN - downlink frequency with doppler, [Hz] en range from 0 to N UP - uplink frequency with doppler, [Hz] en range from 0 to N DM - downlink mode (optional field) UM - uplink mode (optional 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 ----------------------------------------------------
Formato of cadena: SNxxx AZxxx.x ELxx.x DNxxxx UPxxxx DMxxxx UMxxxx AOSxxx Fields: SN - tracked satellite name en quotes RA - range [km] RR - range rate [km/s] LO - longitude en range from -180.0000 to 180.000 (W to E) LA - latitude en range from -90.0000 to 90.000 (S to N) AL - altitude [km] TU - UTC time (Formato: YYYYMMDDhhmmss) TL - local time (Formato: YYYYMMDDhhmmss) AOS - AOS notification for satellite xxx (name en quotes; AOS notification is provided for all tracked objects, not only for active one) Other fields same as en 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 a example of users custom driver for Orbitron with full source code en Delphi 5. It should helps you to write your own driver for rotor or radio hardware. Further information you voluntad find en MAIN.PAS file.
-- 5. Let Orbitron support your driver -----------------------------------------
Please set specific name for your driver program, e.g. SuperRotor.exe. Then you can edit {Orbitron}ConfigSetup.cfg file (*) by adding line to the [Drivers] section (please create it if doesnt exist) with your driver information. Example: [Drivers] SuperRotor=d:My filesSuperRotor.exe SuperRotorTwo= Next time you run Orbitron, your driver voluntad be listed on Rotor/Radio panel. You can launch it there. If no path specified, Orbitron voluntad ask you about your drivers location (drivers located en {Orbitron} directory voluntad be found automatically).
*) {Orbitron} - replace it with directory where Orbitron is installed to, e.g. crogram FilesOrbitron. This path is available en Windows registry: HKEY_CURRENT_USERSoftwareStoffOrbitronPath WARNING: User can define his own location where the Config directory is. This value is stored en registry: HKEY_CURRENT_USERSoftwareStoffOrbitronUserPath So, if this value is specified, you have to use it instead of previous one. HINT: You can check are 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 all! -----------------------------------------------------
Have you already done your driver? Please, send me it. Ill put it on Orbitron website to share it with all people with same hardware as yours.
-- 7. WiSP DDE Client ----------------------------------------------------------
WiSP DDE Client is a application written by Fernando Mederos, CX6DD and available on [...] It works as DDE Client and support many kinds of hardware and software. To use it with Orbitron, following settings are required: Receive DDE from : Orbitron (or Satscape) Source application : Orbitron Link Topic : Tracking Link Item : TrackingData Query Interval : 1 sec. Orbitron voluntad set these values when you launch WiSP DDE Client from Rotor/Radio panel.
-- Last updated 2005.02.26 -----------------------------------------------------
y zweitens una Beispielprogram en PASCAL :
{ My DDE Client is a 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 from Orbitron and send it to your rotor/radio hardware via COM/LPT/USB interfaces. Other purposes are also allowed, depending on your invention... To change this source code into the driver, you must write code specific to hardware you have en UpdateRotorAndRadio procedure. Please find it on the end of this file.
Detailed information are available en 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, Gráficos, Controls, Forms, Dialogs, DdeMan, StdCtrls, ExtCtrls, Buttons, Registry, ComCtrls;
type TSatData = record name : String; //satellite name azm,elv : Double; //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 { Privado 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 if subs1= then Exit; if subs1=subs2 then Exit; i:=Pos(subs1,s); mientras 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,resultado,c); if c>0 then resultado:=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 if source= then begin quotes:=not quotes; Continue; end;
if quotes then source:=-; end; resultado:=pos(field,source); end;
begin source:= +source; field:=UpperCase(field); field:= +field; p1:=FindField(source,field); if p1=0 then begin resultado:=; Exit; end;
s2:=; p2:=p1+Length(field); quotes:=False; mientras que p2<=Length(source) do begin if source[p2]= then begin quotes:=not quotes; Inc(p2); Continue; end;
if (source[p2]= ) and not quotes then Break;
s2:=s2+source[p2]; Inc(p2); end; resultado:=s2; end;
procedure TFMain.ParseString(s: String; var data: TSatData); begin if s= then with data do begin name:=; azm:=0; elv:=0; upf:=0; dnf:=0; upm:=; dnm:=; AOS:=; Exit; end;
s:=UpperCase(s); Replace(s,,,.); with data do begin name:=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; if AOS<> then l_aos.Caption:=AOS (+AOS+) más 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.Texto); if s= then l_st.Caption:=No data más 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)); if PathP[length(PathP)]<> then PathP:=PathP+; ChDir(PathP);
If not FileExists(PathP+Orbitron.exe) then begin Reg:=TRegistry.Create; try if 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 voluntad be called by DDE engine after Orbitron made changes into the tracking data (each 1s, 5s, 10s or así). } end;
end.
soooooo, ahora voluntad Yo warscheinlich schlecht schlafen y todos zwei Minuten reinschauen, wass Ihr así de diesem Wust así macht...
PS.: wer se Orbitron veces anschauen möchte, hier el Adresse para runterladen : www.stoff.pl
LG Uwe |
| | | | |
| | Frank Abbing | Den String, el du auslesen willst. Steht el irgendwo en un Control? Z.B. uno Editbox? Mach Por favor, veces a la Screenshot, wo dieser String a sehen es. |
| | | | |
| | Uwe Skärke | ¡Hola Franco, una mögliche Abbildung Es el : lo va en Azimut y Elevation y en Dopplerfrequenz up y down...
eins Screenshot de uno en Delphi geschriebenen DDE-Anwendung tener Yo auch veces reingelegt, como sieht uno el gesamten String como eben bajo TrackingData de Orbitron previsto se (oben, y ändert se jede sekunde...)
LG UWE |
| | | | |
| | Frank Abbing | Ist doch prima. Wenn irgendwo el String en un Windows-Control es kannst du ihn auslesen. Su Programa podría el Controlhandle ermitteln y el Texto entonces auslesen. |
| | | | |
| | Uwe Skärke | ... schönen guten Morgen Franco, Yo hoffe Usted bist Sonntagsfrühaufsteher ... na sí, es sí klasse si lo prima findest, aber como Yo sí blutiger Principiante bin, steh Todavía en el Regen, mach doch veces nen Vorschlag como yo angehen podría, como Usted a el Uhrzeit sehen kannst, kann Yo no schlafen...
HELP !!!
LG, Uwe |
| | | | |
| | Uwe Skärke | ... evtl. hilft Usted el todavía más en Solución meines Problemes !!??
el zeigt Su WhichLibraries beim Start de Orbitron a :
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 | Mit el Dll-Liste es nichts anzufangen.
Starte veces media pequeño Code y gehe con el Mauszeiger encima el String en deinem Programa. Wird el Texto en mi Ventana en Fenstertext adecuado? Wenn sí es el ya el halbe Miete... KompilierenMarcaSeparación(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 | hallo Franco
du bist como, es sí klasse, hast aber bastante schön largo geschlafen ...
aber eben tener Yo gemerkt, como is qué como *freu*
así nun muss Yo sólo veces lesen qué Usted erfunden hast...
okay, el verswuch Yo veces.. y Funke dich a ...
LG, Uwe |
| | | | |
| | Uwe Skärke | Hi Franco,
Usted debe el XProfan-Comunidad-Nobel-Preis bekommen...
Also a Auswertung :
Handle bajo Mauszeiger unde Mauszeiger (Child) es siempre igual, pero en cada Start de Orbitron anders (z.B. $206DC)
En Klassenname erscheint en el mich interessierenden Boxen siempre TEdit En Fenstername erscheint nie qué, nix, niente, nada
... y el gei.... es, en Fenstertext es genau el Yo brauche, Azimut Elevation,Frequenz ...
ahora muss Yo sólo todavía versuchen a verstehen wadduda gemacht hast...
LG, Uwe |
| | | | |
| | Frank Abbing | Hi.
Handle bajo Mauszeiger unde Mauszeiger (Child) es siempre igual, pero en cada Start de Orbitron anders (z.B. $206DC)
Sí, el es así auch logisch.
En Klassenname erscheint en el mich interessierenden Boxen siempre TEdit
Ok, kein Windows-übliches Editar campo...
En Fenstername erscheint nie qué, nix, niente, nada
Auch logisch.
... y el gei.... es, en Fenstertext es genau el Yo brauche, Azimut Elevation,Frequenz ...
Bingo! Somit kannst du dein Vorhaben ausführen.
ahora muss Yo sólo todavía versuchen a verstehen wadduda gemacht hast...
Usted mußt ahora überlegen, si dein Orbitron-Ventana siempre al selbem Platz es y siempre en el Vordergrund. Wenn sí, kannst feste Positionsangaben uso anstelle de Mauskoordinaten. Wenn nein, musst du anders vorgehen. Usted mußt Orbitron.exe erkennen (encima Prozesshandle oder Windowname), el betreffende Control con el Texto lokalisieren (Fenstertext y Klassenname) y luego auslesen. Es el método, el Yo uso sería. |
| | | | |
| | Uwe Skärke | okay, ...
el zweite Variante sería me mejor gefallen, allerdings costumbre Yo como una vez más Su Ayuda
porque Yo denke, dass en verschiedenen Bildschirmauflösungen auch el Positionsdaten unterschiedlich son y möglicherweise el Orbitron auch veces no en el Vollbildmodus se ejecuta...
... y siempre daran denken, Usted hast lo hier con un Vorschulkind a tun...
PS: y danke, hoffe Yo No el Sonntag vermasselt |
| | | | |
| | Frank Abbing |
... y siempre daran denken, Usted hast lo hier con un Vorschulkind a tun...
Dafür es el Thema eigentlich a schwierig. Puedo me denken, dass du dieses Programa necesidad. Besser wäre aber, con einfacheren Dingen a beginnen...
Auf el Screenshots mi Yo a erkennen a erkennen, dass el de dir benötigten Informationen en varios Controls verstecken. Ist el correcto? Yo müßte genau wissen, welche Information(en) du ständig necesidad. |
| | | | |
|
RespuestaTema opciones | 14.242 Views |
ThemeninformationenDieses Thema ha 2 subscriber: |