Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

RS232 <-> TCP/IP

17K
10 января 2007 года
Виктор А.
36 / / 10.01.2007
:confused: Есть устройство - работает по RS 232.
Требуется от него получать данные множеству клиентов (не суть в количестве, можно и через БД). Вопрос - реально это сделать на C# - понятно что я "начинающий" на C#. Если есть прицеденты - хотябы идея какая? Как оптимально можно организовать это на C# (тут свои примудрости, как я понял). Желательно RS232 - TCP/IP - наверняка есть такие реализации - может кто ссылку даст?
Зарание спасибо.;)
273
14 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Смотри в FAQ - там есть пример доступа к COM-порту (ИМХО, то же самое что и RS-232 только название другое). Ну а далее, читаешь данные с порта, преобразуешь их в пакеты TCP/IP и потом парсишь. Готовые открытые реализации протоколов TCP/IP есть и на C# (думаю, на codeproject точно есть).
17K
14 января 2007 года
Виктор А.
36 / / 10.01.2007
Цитата: 3A3-968M
Смотри в FAQ - там есть пример доступа к COM-порту (ИМХО, то же самое что и RS-232 только название другое). Ну а далее, читаешь данные с порта, преобразуешь их в пакеты TCP/IP и потом парсишь. Готовые открытые реализации протоколов TCP/IP есть и на C# (думаю, на codeproject точно есть).



Пока ответ получил - немножко продвинулся, MSDN и т.д. - "кто ищет, тот иногда находит". Это пилотная реализация в среде .Net. Как работает - нравится, только промышленные проекты (исключая WEB) я пока не встречал на C#. Надо что бы работало в режиме "24х7". И не скромный вопрос - "парсиш" - это что? Да простят меня все, я вот не знаю - может маршрутизатор, что у меня работает под Linux - это что-то похожее? там просто я делаю опрос устройств на порту "A", потом на другом порту "B" клиентам раздаю ответы, или транзитом пересылаю кадры... если это команды.
Спасибо за ответ.

273
16 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Под словом парсить (от англ. Parse) - преобразовать неструктурированный поток байтов из интерфейса RS-232 в пакеты TCP/IP. Но всё не так просто, тебе придётся реализовывать уровни стэка TCP/IP. Как ты знаешь, архитектура TCp/IP состоит из 5 уровней:
Прикладной уровень->Уровень связи хоста->Уровень Интернета->Уровень доступа к сети->Физический уровень. При работе с RS-232 тебе не надо только Физический уровень реализовывать. А вот с остальми - придётся, т.к. у тебя нет проверок на ошибки и т.д.. Если ты хочешь чтобы твой компьютер работал как маршуритзатор (что требует поддержки 3-х нижних уровней OSI, или для TCP/IP - тоже трёх уровней), задача немного облегчается (если как коммутатор, то только 2-х уровней OSI или для TCP/IP - уровень доступа к сети).
273
16 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: Виктор А.
только промышленные проекты (исключая WEB) я пока не встречал на C#.


Да навалом....

17K
17 января 2007 года
Виктор А.
36 / / 10.01.2007
Цитата: 3A3-968M
При работе с RS-232 тебе не надо только Физический уровень реализовывать. А вот с остальми - придётся, т.к. у тебя нет проверок на ошибки и т.д.. Если ты хочешь чтобы твой компьютер работал как маршуритзатор (что требует поддержки 3-х нижних уровней OSI, или для TCP/IP - тоже трёх уровней), задача немного облегчается (если как коммутатор, то только 2-х уровней OSI или для TCP/IP - уровень доступа к сети).


Так как это пробный вариант на C# - следовательно, и задача не сложная: Минимум входных параметров с устройства (4) - устройство активно - т.е. само ч/з 0.25 сек посылает данные (ну, при тупом опросе). На первом этапе, я хочу просто брать данные в буфер, а клиенты работают в других потоках, и формат фрэйма типа HART. С упращением конечно. Клиент просто конектится на порт "Х" и забирает данные из буфера (т.е. читатель). Реализация контроля данных и транспортных ощибок - стандартная. А вот на втором этапе - сервер пишет в базу (период) а клиенты просто смотрят в неё и всё (этот вариант даже проще, наверно).
Вопрос: Кроме стандартного компонента ComPort в C# как то иначе (типа CreateFile...) можно работать. Что-то в моём MSDN примеры просто отсутсутвую на этот счет.
Спасибо.

5
17 января 2007 года
hardcase
4.5K / / 09.08.2005
Есть пример в МСДН, на VB правда, в нём класс RS232 реализован.

В самом FW2.0 есть компонента - называется SerialPort, назначение аналогично.

Я вот только не понял вашей заморочки по поводу TCP/IP.

Задача стандартна. Данные от устройства заворачиваем в Stream, создаём поверх этого стрима свой собственный, который занимается проверкой/конвертированием и т.п. нужными делами, поверх этого стрима кладём класс который позволит подключать слушателей (read-only стримы), для которых будут ретарнслироваться данные от устройства.
А уж кто, там будут эти слушатели - нам без разницы, потому как они есть Stream: FileStream, NetworkStream, etc.
3.3K
17 января 2007 года
GENA_DJ
123 / / 08.03.2005
[QUOTE=hardcase]Я вот только не понял вашей заморочки по поводу TCP/IP.[/QUOTE]
Вот - вот, зачем свой стек протоколов писать - то?
17K
17 января 2007 года
Виктор А.
36 / / 10.01.2007
Цитата: GENA_DJ
Вот - вот, зачем свой стек протоколов писать - то?


Да нет, действительно всё просто. Как говорите - так и в общем-то и делается. А "усложнение" - на будущее, приборов-то много (не один). Пример так и не нащел, видать не судьба... Буду искать в инете. Парюсь на C#, а пока, устройство отлаживую (в смысле пытаюсь с ним договорится, при отсутсвии описания протокола) на С - как то проще, пока.. проще, наверно. Спасибо за участие, а организация той же сети в C# - действительно просто, да и удобно. Пока дайдеш до этой простоты...:)

17K
22 января 2007 года
Виктор А.
36 / / 10.01.2007
Пока искал и задавал вопросы – сделал что требовалось, оказывается – компонент SerialPort работает в своём потоке, просто передаёш ему функцию обработчик чтения (ну, и если надо остальные). Всё работает стабильно (как не странно) запусти на предприятии, вроде замечено переполнение при работе Сервера TCP (но, это уже другая тема)
Спасибо всем!:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог