Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Вт Сен 15, 2009 4:56 pm Заголовок сообщения: [PG5] Сопряжение по RS 485 |
|
|
Добрый вечер!
Столкнулся с такой проблемой.
Есть ведомое не SAIA устройство, подключаемое к SAIA контроллеру по средствам RS 485.
Есть описание слов запроса и соответственно слов ответа в шестнадцетеричном коде.
Помогите как в Fulpa через FBox (Send\Rcv) отправлять\получать данные в Нех виде.
Как организовать такой протокол?
И как правильно настроить S-Bus Master в данном случае? |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Чт Сен 24, 2009 5:46 pm Заголовок сообщения: Продублированно из Групп Saia |
|
|
Если это не Saia устройство, скорее всего протокол - не S-Bus, поэтому S-Bus Master ставить вообще не надо.
Для подобных случаев есть библиотека Communication Text. Для инициализации порта используем блок SASI Char, и для передачи/приема - блоки Receive Char и Transmit Char.
Если это решение - тиражируемое, то правильно будет написать драйвер на ассемблере.
Но это уже другая песня. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Пн Окт 12, 2009 10:56 am Заголовок сообщения: |
|
|
Добрый день!
Для решения этой задача по вашему совету была создана программа, состоящая из вышеупомянутых 3 блоков. Но при попытке отправки кодового слова запроса (через Transmit Char соответсвенно) нет результата, а на выходах контроллера (для PCD2.M5540 согласно гайду 28 и 29) не было замечено изменения напряжения.
В чем может быть причина неработоспособности? |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Пн Окт 12, 2009 12:22 pm Заголовок сообщения: 485 |
|
|
Пришлите программу из этих блоков, посмотрим. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Вт Окт 13, 2009 8:50 am Заголовок сообщения: |
|
|
Выслал файл Fupla. И вдогонку и сам проект) |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Окт 13, 2009 9:10 am Заголовок сообщения: Запрос |
|
|
А пришлите весь проект...
Выберите в меню Project - Backup...
В появившемся окне в области "Backup What" выберите "All files except listings and docs".
Вышлите сохраненный zip файл. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Вт Окт 13, 2009 9:59 am Заголовок сообщения: |
|
|
выслал и бекап |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Окт 13, 2009 12:10 pm Заголовок сообщения: 485 |
|
|
Получил проект - все нормально, должно работать.
Единственное замечание - вы не увидите изменения напряжения, поскольку передаете только один символ. Вход En блока SND-Chr динамический - передача происходит по положительному перепаду на этом входе. Что бы циклически осуществлять передачу, на вход надо подать импульсы. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Вт Окт 13, 2009 1:09 pm Заголовок сообщения: |
|
|
На счет циклической передачи и импульсного входа это понятно. Но как проверить, что передача была осуществленна или осуществляется, потому что при передачи конкртеного слова запроса мы ожидаем получить от внешнего устройство определенный ответ. Конечно возможна причина проблем в счетчике, но как отследить этап, когда данные с контроллера переданы? |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Ср Окт 14, 2009 6:30 am Заголовок сообщения: 485 |
|
|
Попробуйте использовать другой порт для приема.
Контроллер имеет на борту два 485 интерфейса (port #0 и port #3). Заведите с одного на другой, посмотрите в PG5, передаются символы или нет. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Чт Окт 15, 2009 12:33 pm Заголовок сообщения: |
|
|
Завел витую пару с клемм 28 и 29 (User I/O) на контакты 3 и 8 (RxD/TxD-P и RxD/TxD-N) разъема PGU на контроллере. Никаких изменеий в работе программы не последовало... Нужно ли определять какие-то настройки отдельно в блоках приема и передачи и блоке назначения последовательного интерфейса (SASI Char)? Может быть существуют какие-то нюансы в настройках портов, каналов или в чем-нибудь подобном? |
|
Вернуться к началу |
|
|
Arnold
Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Чт Окт 15, 2009 12:48 pm Заголовок сообщения: 485 |
|
|
Вам надо такие же действия со вторым портом проделать - инициализировать, поставить блоки чтения и записи. Соответственно, передаете с #0 на #3, ставите SNDint на порт 0, RSVint на порт 3, и наоборот. Не забудьте только имя дать блоку и в блоках SND и RSV использовать ссылки на соответствующие каналы. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Пт Окт 16, 2009 11:58 am Заголовок сообщения: |
|
|
Правильно ли я понимаю,
† 1 † что номер канала (Channel0) должен соответствовать номеру порта (port number 0) в настройках контроллера (device configurator)?
† 2 † что #0 соответствует контактам User I\O контроллера, а #3 - разъему S-Net/MPI?
† 3 † И вы так же подразумеваете Snd - Char, RCV - Char, говоря SNDint и RCVint, потому что мы не используем в данной задаче S-Bus? |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Пт Окт 16, 2009 12:26 pm Заголовок сообщения: |
|
|
Мы смогли наконецто передать данные с одного порта на другой внутри контроллера, но столкнулись со следующей проблемой - RCV блок у нас принимает только младший байт данных. Как принять все байты?
Тут или он отсылает нормально, но принимает только младший байт, то ли принимает то нормально, а уже на стадия посылки отправляется только младший байт. Как я понимаю эту ситуацию. |
|
Вернуться к началу |
|
|
Кирилл
Зарегистрирован: 10.09.2009 Сообщения: 13
|
Добавлено: Вт Окт 20, 2009 11:35 am Заголовок сообщения: |
|
|
Несомненно использование этих блоков подразумевает передачу одного (до четырех?) ASCII символов, равному как раз 1 байту. Следовательно возникает вопрос возможно ли вообще с помощью блоков (SASI char, send\rcv char) организовать обмен больший чем в один байт? |
|
Вернуться к началу |
|
|
|