Использую, например, CP441-1. Утверждается, что он не поддерживает Modbus-RTU, а только Modbus-ASCII. Мне нужен Modbus-RTU.
Мне непонятно: вот я сформирую нужную последовательность байтов, добавлю CRC и выплюну это посредством библиотечного FB8 - почему не должно работать? Добавляет ли к моей телеграмме что-нибудь CP441-1? Если да, то что? Подскажите, пожалуйста. Тогда я эту добавку просто учту в подсчете CRC.
Еще проблема (см.фото во вложении):
- почему у CP441-1 только Input-адрес, и почему он один, а не диапазон (менял стартовый, но за ним меняется и End-вый)?
- почему нет Output-адресов?
- задаю в программе Степ-7 в блоке FB8 LADDR=8191, в диагностическом буфере ошибка, и адрес указан 8201. Откуда он?
В чем ошибка, и что делать?
Отправлено спустя 1 минуту 47 секунд:
и что вообще за ошибка?
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
какая разница, какой протокол?
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 11
- Зарегистрирован: 27 дек 2016, 06:12
- Имя: Булат
- Страна: Казахстан
- город/регион: Алма-Ата
-
- эксперт
- Сообщения: 3651
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 287 раз
какая разница, какой протокол?
Ошибка типичная - обращение к памяти за пределами допустимого диапазона.
-
- здесь недавно
- Сообщения: 11
- Зарегистрирован: 27 дек 2016, 06:12
- Имя: Булат
- Страна: Казахстан
- город/регион: Алма-Ата
какая разница, какой протокол?
какая память? Где здесь память?
CALL "P_SND_RK" , DB1
SF :='S'
REQ :=DB2.DBX0.3
R :=DB2.DBX0.4
LADDR :=8191
DB_NO :=4
DBB_NO :=0
LEN :=8 //36
R_CPU_NO:=
R_TYP :=
R_NO :=
R_OFFSET:=
R_CF_BYT:=
R_CF_BIT:=
DONE :=DB2.DBX0.0
ERROR :=DB2.DBX0.1
STATUS :=DB4.DBW2
Да, описание ошибки указывает на обращение "не туда". Но где я указываю на какие адреса?
CALL "P_SND_RK" , DB1
SF :='S'
REQ :=DB2.DBX0.3
R :=DB2.DBX0.4
LADDR :=8191
DB_NO :=4
DBB_NO :=0
LEN :=8 //36
R_CPU_NO:=
R_TYP :=
R_NO :=
R_OFFSET:=
R_CF_BYT:=
R_CF_BIT:=
DONE :=DB2.DBX0.0
ERROR :=DB2.DBX0.1
STATUS :=DB4.DBW2
Да, описание ошибки указывает на обращение "не туда". Но где я указываю на какие адреса?
-
- эксперт
- Сообщения: 3651
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 287 раз
-
- здесь недавно
- Сообщения: 11
- Зарегистрирован: 27 дек 2016, 06:12
- Имя: Булат
- Страна: Казахстан
- город/регион: Алма-Ата
какая разница, какой протокол?
в настройках СР441-1 есть (видно на фото): Inputs - Start=8191, End=8191. А Outputs вообще нет. Что это все значит?
В приведенном FB8 блоке:
DB_NO=4 (брать из DB4);
DBB_NO=0 (начиная с DBB0);
LEN=8 (восемь байт).
Не понимаю, причем тут адрес 8191?
Отправлено спустя 1 минуту 1 секунду:
не может же быть, что возможно передать только один байт!?
Отправлено спустя 2 часа 5 минут 23 секунды:
ладно, все-таки у меня первый вопрос остается. Могу я сформировать цепочку байтов, добавить CRC и выкинуть посредством библиотечного блока SEND телеграмму Modbus-RTU через СР441-1? Этот СР441-1, поскольку заточен для ASCII, не будет добавлять в мою телеграмму впереди двоеточие, заменять каждый мой байт на два байта и пр.? Или как есть отправит мою цепочку?
В приведенном FB8 блоке:
DB_NO=4 (брать из DB4);
DBB_NO=0 (начиная с DBB0);
LEN=8 (восемь байт).
Не понимаю, причем тут адрес 8191?
Отправлено спустя 1 минуту 1 секунду:
не может же быть, что возможно передать только один байт!?
Отправлено спустя 2 часа 5 минут 23 секунды:
ладно, все-таки у меня первый вопрос остается. Могу я сформировать цепочку байтов, добавить CRC и выкинуть посредством библиотечного блока SEND телеграмму Modbus-RTU через СР441-1? Этот СР441-1, поскольку заточен для ASCII, не будет добавлять в мою телеграмму впереди двоеточие, заменять каждый мой байт на два байта и пр.? Или как есть отправит мою цепочку?
-
- эксперт
- Сообщения: 3651
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 287 раз
какая разница, какой протокол?
Попробуйте Len=1, вдруг ошибка уйдёт и сразу всё встанет на свои места.
-
- здесь недавно
- Сообщения: 33
- Зарегистрирован: 14 апр 2018, 00:10
- Имя: Максим
- Страна: Россия
- город/регион: ru->region[33]
- Благодарил (а): 29 раз
- Поблагодарили: 3 раза
какая разница, какой протокол?
Думаю что не прокатит: как я понимаю, ASCII - это передача текстом, а при текстовом протоколе есть ограничения на кодировку символов.
В добавок, некоторые символы могут иметь специальное значение в этом протоколе.
То есть двоичные данные без специального кодирования через него не передать.
Ярким примером текстового протокола является HTTP
Честно скажу: с Modbus-ASCII не знаком, могу ошибаться.