monstr
18.05.2010, 22:48
Я так и не разобрался, как грамотно парковать монти, управляемую через EQMOD, да и похоже соседи не разобрались, или я пропустил. Поэтому написал маленькую прогу на том же C# 2010 (узнать бы, как перенести экзешник без установки visual studio) :).
Кому нужно, могу дать код проекта. А как научусь генерить переносимые экзешники, выложу и его.
Это, пока что, alpha версия, не запоминает ничего - нет времени дописать запись в регистри.
Прога может выбирать монти (опробовал, пока что, только на симуляторе), коннектиться к нему (надо будет автоматом сделать) и читать высоту и азимут из монти в 4 слота. Данные можно редактировать, а можно оставить как есть и записывать в монти.
Прога написана с целью плановой парковки телескопа в любую удобную позицию средствами любого планетария (о! идея, надо будет добавить кнопку "перейти" к ранее сохранённым alt/az), потом позицию сохраняю, монти можно выключать. После включения обратный процесс - данные из формы заносятся в монти (синхронизация).
Ну и ещё, если произошёл сбой, то вручную навожу трубу на какую-нить точку с известными высотой и азимутом и синхронизирую. Ну или просто несколько точек парковки. Реальное использование покажет куда прога пойдёт.
С# и ASCOM, оказались прям очень близкими родственниками, вот весь, пока кривой код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ASCOM.Interface;
using ASCOM.Helper;
using ASCOM.DriverAccess;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Telescope T;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
if (T.Connected)
{
label1.Text = Convert.ToString(T.Altitude);
label2.Text = Convert.ToString(T.Azimuth);
}
}
private void button1_Click(object sender, EventArgs e)
{
T.Connected = true;
panel1.BackColor = System.Drawing.Color.FromName("Green");
}
private void button2_Click(object sender, EventArgs e)
{
T.Connected = false;
panel1.BackColor = System.Drawing.Color.FromName("Red");
}
private void button4_Click(object sender, EventArgs e)
{
string progID = Telescope.Choose("");
T = new Telescope(progID);
textBox1.Text = progID;
timer1.Enabled = true;
}
private void button5_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox2.Text), Convert.ToDouble(textBox3.Text));
}
private void button6_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(T.Altitude);
textBox2.Text = Convert.ToString(T.Azimuth);
}
private void button3_Click(object sender, EventArgs e)
{
textBox6.Text = Convert.ToString(T.Altitude);
textBox7.Text = Convert.ToString(T.Azimuth);
}
private void button10_Click(object sender, EventArgs e)
{
textBox4.Text = Convert.ToString(T.Altitude);
textBox5.Text = Convert.ToString(T.Azimuth);
}
private void button8_Click(object sender, EventArgs e)
{
textBox8.Text = Convert.ToString(T.Altitude);
textBox9.Text = Convert.ToString(T.Azimuth);
}
private void button9_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox6.Text), Convert.ToDouble(textBox7.Text));
}
private void button11_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox4.Text), Convert.ToDouble(textBox5.Text));
}
private void button7_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox8.Text), Convert.ToDouble(textBox9.Text));
}
}
}
просто же... :).
Потом добавлю обработку эксепшинов и работу с регистри, ща не до этого.
Кому нужно, могу дать код проекта. А как научусь генерить переносимые экзешники, выложу и его.
Это, пока что, alpha версия, не запоминает ничего - нет времени дописать запись в регистри.
Прога может выбирать монти (опробовал, пока что, только на симуляторе), коннектиться к нему (надо будет автоматом сделать) и читать высоту и азимут из монти в 4 слота. Данные можно редактировать, а можно оставить как есть и записывать в монти.
Прога написана с целью плановой парковки телескопа в любую удобную позицию средствами любого планетария (о! идея, надо будет добавить кнопку "перейти" к ранее сохранённым alt/az), потом позицию сохраняю, монти можно выключать. После включения обратный процесс - данные из формы заносятся в монти (синхронизация).
Ну и ещё, если произошёл сбой, то вручную навожу трубу на какую-нить точку с известными высотой и азимутом и синхронизирую. Ну или просто несколько точек парковки. Реальное использование покажет куда прога пойдёт.
С# и ASCOM, оказались прям очень близкими родственниками, вот весь, пока кривой код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ASCOM.Interface;
using ASCOM.Helper;
using ASCOM.DriverAccess;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Telescope T;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
if (T.Connected)
{
label1.Text = Convert.ToString(T.Altitude);
label2.Text = Convert.ToString(T.Azimuth);
}
}
private void button1_Click(object sender, EventArgs e)
{
T.Connected = true;
panel1.BackColor = System.Drawing.Color.FromName("Green");
}
private void button2_Click(object sender, EventArgs e)
{
T.Connected = false;
panel1.BackColor = System.Drawing.Color.FromName("Red");
}
private void button4_Click(object sender, EventArgs e)
{
string progID = Telescope.Choose("");
T = new Telescope(progID);
textBox1.Text = progID;
timer1.Enabled = true;
}
private void button5_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox2.Text), Convert.ToDouble(textBox3.Text));
}
private void button6_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString(T.Altitude);
textBox2.Text = Convert.ToString(T.Azimuth);
}
private void button3_Click(object sender, EventArgs e)
{
textBox6.Text = Convert.ToString(T.Altitude);
textBox7.Text = Convert.ToString(T.Azimuth);
}
private void button10_Click(object sender, EventArgs e)
{
textBox4.Text = Convert.ToString(T.Altitude);
textBox5.Text = Convert.ToString(T.Azimuth);
}
private void button8_Click(object sender, EventArgs e)
{
textBox8.Text = Convert.ToString(T.Altitude);
textBox9.Text = Convert.ToString(T.Azimuth);
}
private void button9_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox6.Text), Convert.ToDouble(textBox7.Text));
}
private void button11_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox4.Text), Convert.ToDouble(textBox5.Text));
}
private void button7_Click(object sender, EventArgs e)
{
T.SyncToAltAz(Convert.ToDouble(textBox8.Text), Convert.ToDouble(textBox9.Text));
}
}
}
просто же... :).
Потом добавлю обработку эксепшинов и работу с регистри, ща не до этого.