Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 01.10.2008
Откуда: Петербург
Здравствуйте. Необходима помощь в написании программы. Собственно имеется gps-гланас приемник подключенный к компу через usb, с программами он общается через виртуальный com порт. Суть в том что когда приемник работает в режиме только gps он отправляет данные в виде GPxxxx, когда в режиме глонас GLxxxx, в комбо режиме (глонас+gps) GNxxxx. Режимы переключаются автоматически, в зависимости от доступности спутников. Но большинство программ не понимают сообщения GNxxxx и GLxxxx, поэтому необходима программа которая будет ловить сообщения приемника, заменять GN и GL на GP и передавать эти данные на другой виртуальный com порт, с которым и будут работать программы.
Программу необходимо написать на языке c#. Буду благодарен за любые советы по написанию программы. Спасибо.



Партнер
 

Member
Статус: Не в сети
Регистрация: 07.01.2010
остальной формат совпадает? а датумы одинаковые?


 

Member
Статус: Не в сети
Регистрация: 01.10.2008
Откуда: Петербург
Да остальной формат совпадает, тоесть мемжду работой в gps и глонас разница только в начале кода. Простите, а что такое датумы?


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
http://ru.wikipedia.org/wiki/%D0%94%D0% ... 1%83%D0%BC


 

Member
Статус: Не в сети
Регистрация: 01.10.2008
Откуда: Петербург
Да одинаковые.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
тогда просто вычитывать из одного порта, подправлять, слать в другой
http://forum.sources.ru/index.php?showtopic=257276


 

Member
Статус: Не в сети
Регистрация: 01.10.2008
Откуда: Петербург
Спасибо.


 

Member
Статус: Не в сети
Регистрация: 01.10.2008
Откуда: Петербург
Код:
using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort serialPort1;
    static SerialPort serialPort2;
     static string message;

    public static void Main()
    {
        Thread readThread = new Thread(Read);
        serialPort1 = new SerialPort();
        serialPort2 = new SerialPort();
       
serialPort1.PortName = "COM1"; //Указываем наш порт
serialPort1.BaudRate = 9600; //указываем скорость.
serialPort1.DataBits = 8;
serialPort1.Open(); //Открываем порт.
serialPort2.PortName = "COM9"; //Указываем наш порт
serialPort2.BaudRate = 9600; //указываем скорость.
serialPort2.DataBits = 8;
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 500;
serialPort2.ReadTimeout = 500;
serialPort2.WriteTimeout = 500;
serialPort2.Open(); //Открываем порт.
_continue = true;
readThread.Start();
readThread.Join();
serialPort1.Close();
serialPort2.Close();//Закрываем порт.
}
    public static void Read()
    {
        while (_continue)
        {
            try
            {
                message = serialPort1.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }
    public static void Write()
    {
        while (_continue)
        {
            try
            {
                serialPort2.WriteLine(String.Format(message));
            }
            catch (TimeoutException) { }
        }
    }
}


Гляньте пожалуйста, на предмет ошибок. Данная программа должна считывать с ком порта данные и отправлять их на другой порт.

Добавлено спустя 37 минут 54 секунды:
Код:
using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort serialPort1;
    static SerialPort serialPort2;
     static string message;

    public static void Main()
    {
        Thread readThread = new Thread(Read);
        serialPort1 = new SerialPort();
        serialPort2 = new SerialPort();
       
serialPort1.PortName = "COM1"; //Указываем наш порт
serialPort1.BaudRate = 9600; //указываем скорость.
serialPort1.DataBits = 8;
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 500;
serialPort1.Open(); //Открываем порт.
serialPort2.PortName = "COM9"; //Указываем наш порт
serialPort2.BaudRate = 9600; //указываем скорость.
serialPort2.DataBits = 8;
serialPort2.ReadTimeout = 500;
serialPort2.WriteTimeout = 500;
serialPort2.Open(); //Открываем порт.
_continue = true;
readThread.Start();
readThread.Join();
serialPort1.Close();
serialPort2.Close();//Закрываем порт.
}
    public static void Read()
    {
        while (_continue)
        {
            try
            {
                message = serialPort1.ReadLine();
                message = message.Replace("GLGSA", "GPGSA");
                message = message.Replace("GNGSA", "GPGSA");
                serialPort2.WriteLine(String.Format(message));
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }
   
}

Делает тоже самое что и прога постом выше, но ищет в строке GLGSA и GNGSA и заменяет на GPGSA, ну и по мелочи подправил. Прошу посмотреть на наличие логических ошибок (при компиляции ошибок нет).

Добавлено спустя 9 часов 26 минут 13 секунд:
Посмотрите пожалуйста и скажите будет ли программа работать как положено или нет. Волнует вот эта часть:
Цитата:
message = serialPort1.ReadLine();
message = message.Replace("GLGSA", "GPGSA");
message = message.Replace("GNGSA", "GPGSA");
serialPort2.WriteLine(String.Format(message));

не будет ли он выдавать ошибок?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan