PDA

Просмотр полной версии : Проблема приема данных в спк107 с датчика



KuristinaK
12.03.2021, 22:01
Здравствуйте.

У меня есть передатчик(arduino uno), который постоянно шлет значения. Просто значения, в какой-то последовательности. В спк необходимо принять эти значения. Насколько я поняла, необходимо открыть порт rs-232 (он в com 5) и начать чтение значений. Что я делаю: открываю порт (open), ставлю его в режим чтения(read) и жду строку (попробовала добавить через таймер Ton и зациклить - этапы circle и wait)(дальше идет закрытие порта). Но строка не приходит, она просто нулевая.
Подскажите, пожалуйста, в чем может быть проблема?
Ниже прикрепила саму программу.

P.S. было сделано на основе документации "V3.5. Реализация нестандартных протоколов"

Евгений Кислов
13.03.2021, 08:30
Добрый день.
Посмотрите пример:
https://owen.ru/forum/showthread.php?t=28167&p=351298&viewfull=1#post351298

melky
13.03.2021, 10:18
А не лучше на Arduino сделать Modbus Slave ?

KuristinaK
13.03.2021, 13:34
Спасибо.
Но у меня возникает проблема с библиотекой SysMem.
Как ее исправить?

Евгений Кислов
13.03.2021, 13:36
Спасибо.
Но у меня возникает проблема с библиотекой SysMem.
Как ее исправить?

Пример создан в CODESYS V3.5 SP14 Patch 3, ваш проект - в V3.5 SP11 Patch 5.
Проще всего вам будет скопировать код из примера в свой проект и продолжить работать в нем.

KuristinaK
13.03.2021, 13:45
Поняла.

(Может быть, для этого необходимо уже открыть новую тему, но.. )
Как тут быть?

Евгений Кислов
13.03.2021, 13:48
Какая у вас версия прошивки контроллера? (посмотреть можно в сервисном меню или конфигураторе)
Какая версия таргет-файла сейчас в проекте? (в CODESYS: узел Device, вкладка Информация; лучше выложить в виде скриншота)

KuristinaK
13.03.2021, 13:59
(Раньше проекты работали)

Версия прошивки: 1.1.0611.1056
(Таргет-файл во вложениях)

Евгений Кислов
13.03.2021, 14:17
У вас версия таргет-файла должна быть 3.5.11.57.
ПКМ на Device - Обновить устройство - выберите версию 3.5.11.57

KuristinaK
13.03.2021, 15:13
Заработало :D
Но.. При открытии порта Com.Read все равно ничего не читается (и выбивает ошибку в com.read xError часто).

Чисто на вскидку, могут ли не читаться данные, если не совпадают уровни напряжения? Например, тогда придется ставит преобразователь уровней?

Евгений Кислов
13.03.2021, 15:17
Но.. При открытии порта Com.Read все равно ничего не читается (и выбивает ошибку в com.read xError часто).

Это происходит:
- в вашем коде?
- в коде из примера?
- в коде из примера, который вы отредактировали?

Какое значение имеет выход eError при xError = TRUE?


Чисто на вскидку, могут ли не читаться данные, если не совпадают уровни напряжения? Например, тогда придется ставит преобразователь уровней?

Безусловно - если на стороне Arduino у вас не RS-232, а TTL, то работать это не будет.
Но xError при этом всё равно появляться не должно было бы.

KuristinaK
13.03.2021, 15:56
1) В коде из примера, который был отредактирован - единственное, что изменила, это убрала посылку сообщения мастеру.
И нет, больше не выдает ошибку (перезагрузила проект) :D

2) Тогда.. понятно, почему не получалось) (в понедельник всё исправят)

Спасибо

KuristinaK
13.03.2021, 19:08
А возможно ли принять данные, если подключить ардуин и спк через usb? (usb b - usb a)

Евгений Кислов
13.03.2021, 19:35
А возможно ли принять данные, если подключить ардуин и спк через usb? (usb b - usb a)

Если на стороне СПК вы собираетесь использовать USB B - то нельзя.
Если USB A - то это возможно в последней прошивке с помощью библиотеки CmpOwenUsbHid (соответственно, Arduino должен будет работать в режиме USB HID устройства).

melky
13.03.2021, 20:18
у меня глупый вопрос, на Arduino Uno есть RS485? или вы используете преобразователь ?

KuristinaK
14.03.2021, 13:00
Соединяю Arduino и адаптер от спк1хх через Rx Tx и GND

KuristinaK
14.03.2021, 13:03
если на стороне Arduino у вас не RS-232, а TTL, то работать это не будет.
Я соединяю ардуино и адаптер от спк 1хх проводами Rx Tx GND. Этого разве не достаточно?

Евгений Кислов
14.03.2021, 13:20
Я соединяю ардуино и адаптер от спк 1хх проводами Rx Tx GND. Этого разве не достаточно?

Этого было бы достаточно, если бы на обоих концах проводов был один и тот же физический интерфейс.
Гугл по запросу "arduino ttl rs-232" предоставит сотни обсуждений с вопросами, аналогичными вашему.
http://arduino.ru/forum/apparatnye-voprosy/rs-232-na-anrduino-uno

melky
14.03.2021, 13:34
KuristinaK недостаточно, разные уровни. Вам нужен преобразователь RS485-TTL с авто определением передачи (есть которыми надо управлять со стороны Arduino, не нарвитесь). Или же RS232-TTL так же с авто определением передачи.

KuristinaK
16.03.2021, 01:04
Спасибо большое) Получаю данные)