roboforum.ru

Технический форум по робототехнике.

проект "PDAonBoard"

Re: проект "PDAonBoard"

statistic » 28 дек 2009, 23:07

Братья по роботоразуму ,подскажите .дальномеры Шарповские на постороннюю засветку реагируют?ну там лампы всякие, экраны ,пульты ДУ.

Re: проект "PDAonBoard"

D1mcon » 28 дек 2009, 23:26

statistic писал(а):
с т.з. программы это таки два ком порта

Я имею в виду мне для БТ тот же класс в C# использовать- SerialPort?Только ставить в конструкторе не один,а две штуки и потом один включать при передаче,а второй при приёме .Так?

Что-то я не понял о чем идет речь :( . В классе SerialPort нет перегруженного конструктора на 2 portName.
Если всеже нужно работать с 2-мя портами одновременно то нужно создать 2 объекта класса SerialPort. А чтоб совсем все было хорошо (избежать конфликтов при одновременном приеме) лучше сделать класс наследник от SerialPort, переопределить метод DataReceived (сделать проверку заполнения буфера по таймеру),создавать и работать с объектами класса наследника.

А разъем ты классный нашел :good: . Я из-за него покупал дата-кабель.

Re: проект "PDAonBoard"

statistic » 28 дек 2009, 23:40

то нужно создать 2 объекта класса SerialPort.

Именно это я и хотел сказать ,просто в терминологии не силён.
лучше сделать класс наследник от SerialPort

А вот здесь и дальше вы как то не понятно выругалися,что мне прям в угол встать захотелось.Ничо не понял ,новичок-с! :oops: Но учусь потихоньку.

Re: проект "PDAonBoard"

MiBBiM » 28 дек 2009, 23:43

D1mcon писал(а):создать 2 объекта класса SerialPort

об этом и речь
D1mcon писал(а):избежать конфликтов при одновременном приеме

поясните, пожалуйста, откуда там возьмутся конфликты.

Добавлено спустя 30 секунд:
P.S. statistic опередил чуток :D

Re: проект "PDAonBoard"

D1mcon » 28 дек 2009, 23:52

2statistic
Да нет я не ругался :) Просто у SerialPort есть реальный баг - при одновременной работе с несколькими открытыми портами возникают конфликты, поэтому забиваем на событие получение данных, создаем таймер в нем проверяем значение поля bytereceived, если не 0 читаем буфер. В итоге все нормально работает и нет необходимости создания делегата для извлечения данных из буфера SerialPort. Это все по собственному опыту.

2MiBBiM
При создании SerialPort он автоматически создает поток, в котором он читает и передает данные. Если много открытых портов возрастает вероятность одновременного использования некоторого объекта всеми объектами SerialPort -> всеми потоками, вот здесь и подводный камень, так просто данные из потока не извлекаются, и объкты в потоках если не Static (и не SingleTone) имеют локальные копии, следовательно либо:
1) Конфликт при обращении к разделяемым ресурсам
2) Неявное модифицирование некоторого объекта -> получения неожидаемого результата.

По опыту: конфликты могут проявиться и при 2 портах, особенно если данные одного нужно передать другому.

Re: проект "PDAonBoard"

statistic » 29 дек 2009, 00:57

Это как-то так должно выглядеть?
Код: Выделить всёРазвернуть
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace ПроверкаКом
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (serialPort1.BytesToRead != 0) textBox1.Text =""+ serialPort1.ReadByte();
        }
    }
}

и пожалуйста ,мож кто знает:
Братья по роботоразуму ,подскажите .дальномеры Шарповские на постороннюю засветку реагируют?ну там лампы всякие, экраны ,пульты ДУ.

Re: проект "PDAonBoard"

statistic » 29 дек 2009, 09:44

to D1mcon А если например обработка таймера начнётся как раз при приёме данных в буфер?От этого ошибки не будут происходить?

Re: проект "PDAonBoard"

D1mcon » 29 дек 2009, 13:42

Нет, у меня с этим не было проблем. :)
Про шарпы смотри по форуму, по-моему это уже много раз обсуждалось :)
Про приведенный выше код:
Логика правильная, но можно потом и целую строку читать.
Работа с таймером избавит вас от некоторых проблем. Для начала это лучшее решение.

Re: проект "PDAonBoard"

statistic » 29 дек 2009, 14:21

ОК.Опробую ваш вариант.Это у меня получится три порта в употреблении.Один на МК(rs232),и два на ВТ для связи с компом.

Re: проект "PDAonBoard"

D1mcon » 29 дек 2009, 15:16

Что-то не пойму, зачем Вам столько портов?:) Поясните. :)

Re: проект "PDAonBoard"

MiBBiM » 29 дек 2009, 16:39

в разъем от lg-600 5-ти контактный miniusb входит как родной, причем он ещё и с двух сторон зажимается защелками разъема. :)
а вот большой usb-a толстоват :( но напильничком можно попробовать.
наконец-то появилось решение компактного юсб-хост переходника :)
D1mcon, наверняка по одному управлять ботом, а двум другим - держать коннект по БТ с ББ

Re: проект "PDAonBoard"

Myp » 29 дек 2009, 17:09

а зачем два порта для обмена по блютусу?
там же только один используется для обмена

первый порт если устройство инициирует соединение, второй порт если компьютер инициализирует соединение.
один порт мастер второй порт слэйв.

обычно комп инициализирует соединение и на КПК используется слэйв копорт.

Re: проект "PDAonBoard"

MiBBiM » 29 дек 2009, 19:53

чтобы не иметь головняков с перманентным открыванием/закрыванием порта при двухстороннем обмене?

Re: проект "PDAonBoard"

D1mcon » 29 дек 2009, 20:16

Что-то я вас совсем не понимаю :pardon: Зачем постоянно что-то открывать и закрывать :)
Не догоняю, поясните. :)
2MiBBiM что кроется за секретной аббревиатурой ББ

Re: проект "PDAonBoard"

Myp » 29 дек 2009, 20:22

MiBBiM писал(а):чтобы не иметь головняков с перманентным открыванием/закрыванием порта при двухстороннем обмене?

нет
2 порта используются для разделения мастер/слэйв


ББ это аббревиатура от Большой Брат
главный компьютер который за всеми нами следит.


cron
Rambler\'s Top100 Mail.ru counter