Пример программы, использующей подключение к автомобилю

В данном примере от автомобиля получаются и отображаются параметры: скорость, пройденный с начала поездки путь, мгновенный расход топлива и наличие неисправности двигателя. В примере используется форма с шестью объектами Label для отображения данных, одним таймером (событие OnTick) и двумя кнопками. Запускается съем данных по событию Click в OnClick_Start, останавливается в OnClick_Stop.

Для работы данного примера требуется, чтобы была установлена демо-версия программы Check-Engine. Пример расчитан на работу под Windows XP/Vista. Для КПК при вызове Agent.Open должен быть указан соответсвенно путь установки демо-версии программы Check-Engine на КПК.

using System;
using System.Windows.Forms;

using CarApplet;
using CEAgent;

namespace CEAgentTester
{
    public partial class TesterForm : Form
    {

        private CarGateway TheCar = null;

        private Sensor snsSpeed;
        private Sensor snsDistance;
        private Sensor snsFuelPerHour;
        private Sensor snsFuelPerDistance;
        private Sensor snsErrorDetected;


        public TesterForm()
        {
            InitializeComponent();
        }


        private void OnClosed(object sender, EventArgs e)
        {
            if (Agent.IsOpen)
                Agent.Close();
        }

        
        private void OnClick_Start(object sender, EventArgs e)
        {

            if (Agent.IsOpen)
            {
                label6.Text = "Already open";
                return;
            }

            label6.Text = "Trying to open...";
            Agent.Open("C:\\Program Files\\ACELab\\Check-Engine Demo");

        }


        private void OnClick_Stop(object sender, EventArgs e)
        {

            if (!Agent.IsOpen)
            {
                label6.Text = "Already closed";
                return;
            }


            label6.Text = "Trying to close...";
            
            Agent.Close();
            TheCar = null;

            label6.Text = "Closed";

        }


        private void OnTick(object sender, EventArgs e)
        {

            // Если интерфейс не открыт - делать нечего
            if (!Agent.IsOpen)
                return;

            // Сиотрим, доступен ли автомобиль
            // Если недоступен - пробуем пробиться
            if (TheCar == null)
            {

                // Что то надо сказать...
                label6.Text = "Waiting connection...";

                // Пробуем пробиться к автомобилю
                TheCar = Agent.GetCar();

                // Проверяем, получилось или нет
                if (TheCar == null)
                    return;

                // Получилось, вытаскиваем нужные датчики
                snsSpeed = TheCar.AllSensors["CheckEngine.FuelCons.Speed"];
                snsDistance = TheCar.AllSensors["CheckEngine.TheTrip.DistanceWent"];
                snsFuelPerHour = TheCar.AllSensors["CheckEngine.TheTrip.FuelPerHour"];
                snsFuelPerDistance = TheCar.AllSensors["CheckEngine.TheTrip.FuelPerDist"];
                snsErrorDetected = TheCar.AllSensors["CheckEngine.Errors.ErrorDetected"];

                // Запускаем съем данных нужных датчиков
                snsSpeed.Essential = true;
                snsDistance.Essential = true;
                snsFuelPerHour.Essential = true;
                snsFuelPerDistance.Essential = true;
                snsErrorDetected.Essential = true;

                // Все получилось...
                label6.Text = "Connected!";

            }

            // Обновляем контролы формы...
            label1.Text = snsSpeed.Title + ": " + snsSpeed.Textual + " " + snsSpeed.MeasureUnit;
            label2.Text = snsDistance.Title + ": " + snsDistance.Textual + " " + snsDistance.MeasureUnit;
            label3.Text = snsFuelPerHour.Title + ": " + snsFuelPerHour.Textual + " " + snsFuelPerHour.MeasureUnit;
            label4.Text = snsFuelPerDistance.Title + ": " + snsFuelPerDistance.Textual + " " + snsFuelPerDistance.MeasureUnit;
            label5.Text = snsErrorDetected.Title + ": " + snsErrorDetected.Textual;

        }

    }
}