PDA

Просмотр полной версии : Как согласовать ТРМ201 и S7-1200 по протоколу modbus



kr1810bm86
04.05.2013, 19:45
Проблема в том что ТРМ210 имеет только одну функцию для чтения "03".
В стандартном устройстве (в среде TIA Portal 12 ) MB_MASTER, эта функция предназначена для чтения нескольких байт по адресам
40001 to 49999 или 400001 to 465535.
В ТРМ201 максимальный адрес 1794.
В результате на запрос двух байт по адресу 0001 (измеренная величина)
, получаю ответ - не поддерживаемая функция. Т.к. MB_MASTER посылает по этому адресу запрос с функцией "01"

Что делать? Писать самому обработку протокола?

Использую плату COMMUNICATION BOARD CB 1241, RS485 . Это так, для справки.

capzap
04.05.2013, 20:08
Проблема в том что ТРМ210 имеет только одну функцию для чтения "03".
В стандартном устройстве (в среде TIA Portal 12 ) MB_MASTER, эта функция предназначена для чтения нескольких байт по адресам
40001 to 49999 или 400001 to 465535.
В ТРМ201 максимальный адрес 1794.
В результате на запрос двух байт по адресу 0001 (измеренная величина)
, получаю ответ - не поддерживаемая функция. Т.к. MB_MASTER посылает по этому адресу запрос с функцией "01"

Что делать? Писать самому обработку протокола?

Использую плату COMMUNICATION BOARD CB 1241, RS485 . Это так, для справки.
проект выложите, а то Вы написали такую ересь, что без "огненной" воды не разобраться

BETEP
05.05.2013, 14:29
попробуйте вместо 0001 запросить 40001, или скорее всего 40002

kr1810bm86
07.05.2013, 10:57
попробуйте вместо 0001 запросить 40001, или скорее всего 40002

Я вот на выходных, тоже подумал в эту сторону. Щас буду пробовать. Может надо запрашивать 16#A001 (40961).


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

А что собственно не понятно?
Все взято со странички помощи, раздел "DATA_ADDR and MODE parameters" в главе "MB_MASTER: Communicate via the PtP port as Modbus master"

capzap
07.05.2013, 11:33
Ну вопервых смущает небрежность, то ли 201, то ли 210.
Расширенный режим трм не поддерживает, зачем про него писать если только не пытаетесь использовать
Четвертка в начале адреса обычно показывает что обращение идет к регистрам хранения
В модбасе используется понятие регистр и упоминание о двух байтах приводит к вопросу, а указатель на что у Вас стоит

ЗЫ где читать доки по блоку я знаю

kr1810bm86
07.05.2013, 11:41
Ну вопервых смущает небрежность, то ли 201, то ли 210.
Расширенный режим трм не поддерживает, зачем про него писать если только не пытаетесь использовать
Четвертка в начале адреса обычно показывает что обращение идет к регистрам хранения
В модбасе используется понятие регистр и упоминание о двух байтах приводит к вопросу, а указатель на что у Вас стоит

ЗЫ где читать доки по блоку я знаю

ТРМ 201, остальное ошибка. Ну устал я :).
Нафига мне расширенный режим?
Мне надо прочитать по адресу 16#0001, 16 битный регистр, .Это и есть 2 байта (в байте 8 бит, ну меня так учили). ТРМ 201 поддерживает только команду "3". А MB_MASTER по такому адресу выдает команду "1".
Поэтому АБСОЛЮТНО пофиг, что там в том регистре находится :). ТРМ просто дает ошибку.

BETEP
07.05.2013, 11:42
40001 to 49999 или 400001 to 465535.
четвёрка спереди, просто обозначение что это Holding Registers
0 - Output coil (дискретные выходы)
1 - Discrete Inputs (дискретные входы)
3 - Input Registers (входные регистры)
4 - Holding Registers (регистры хранения)
5 - как тип 4, но производится перестановка байт

Как в вашей проге указывается обращение к регистрам хранения? от этого и будет зависеть с каким кодом в порт уйдёт запрос к регистру 0001, а если пишут 40001 to 49999, то тут ещё и смещение на единицу присутствует.
-------------------------
т.е. 400001 это регистр хранения читаемый кодом 03 с номером 0

capzap
07.05.2013, 11:46
ТРМ 201, остальное ошибка. Ну устал я :).
Нафига мне расширенный режим?
Мне надо прочитать по адресу 16#0001, 16 битный регистр, .Это и есть 2 байта (в байте 8 бит, ну меня так учили). ТРМ 201 поддерживает только команду "3". А MB_MASTER по такому адресу выдает команду "1".
Поэтому АБСОЛЮТНО пофиг, что там в том регистре находится :). ТРМ просто дает ошибку.

Вот мне и кажется, что если указатель на байты, как Вам нравится, а не на ворды то блок и читает коилсы

kr1810bm86
07.05.2013, 11:59
четвёрка спереди, просто обозначение что это Holding Registers
0 - Output coil (дискретные выходы)
1 - Discrete Inputs (дискретные входы)
3 - Input Registers (входные регистры)
4 - Holding Registers (регистры хранения)
5 - как тип 4, но производится перестановка байт

Спасибо за информацию, надо подумать, почитать.




Как в вашей проге указывается обращение к регистрам хранения? от этого и будет зависеть с каким кодом в порт уйдёт запрос к регистру 0001, а если пишут 40001 to 49999, то тут ещё и смещение на единицу присутствует.
-------------------------
т.е. 400001 это регистр хранения читаемый кодом 03 с номером 0
Фиг его знает как оно там обращается. Есть готовый модуль, ему задаются параметры, адрес, к-во регистров (байт? тут я еще не понял)
и команда. Но команды не modbus, а Сименсовские, которые модуль сам переводит в команду modbus, в зависимости от адреса. Ну так я понял документацию.

Кстати вопрос. Эту 4 добавлять в десятичной системе? или шестнадцатеричной?

kr1810bm86
07.05.2013, 12:00
Вот мне и кажется, что если указатель на байты, как Вам нравится, а не на ворды то блок и читает коилсы
Может быть, но возвращаемая ошибка "неверная команда" ( Function code not supported )

capzap
07.05.2013, 12:05
Может быть, но возвращаемая ошибка "неверная команда" ( Function code not supported )

Чего в ней неверного, блок определил что от него ждут дискреты и посылает запрос первой функцией. Определит что ждут регистры отправит третью

kr1810bm86
07.05.2013, 12:15
Чего в ней неверного, блок определил что от него ждут дискреты и посылает запрос первой функцией. Определит что ждут регистры отправит третью
И всего-лишь на второй страничке, Вы добрались до сути. Осталось узнать как блок определяет что от него ждут? Дискрет или регистр. Кстати BETEP указал на это в своем втором пОсте :)

capzap
07.05.2013, 12:24
Ничего подобного, у нас с Ветром разные подходы в этом вопросе. Если добавление четвертки помоголо, ну и славно.

kr1810bm86
07.05.2013, 12:27
Ничего подобного, у нас с Ветром разные подходы в этом вопросе. Если добавление четвертки помоголо, ну и славно.
Почти так. Только вот у меня нету пока ни какого подхода. :) А вот от Вас кроме просьбы выложить проект, не было ни одного предложения

capzap
07.05.2013, 12:35
Я писал что меня интересует, Вы не ответили, для Вас это не существенно. И каких предложений Вы ждете

kr1810bm86
07.05.2013, 12:54
Я писал что меня интересует, Вы не ответили, для Вас это не существенно. И каких предложений Вы ждете

Вас интересует мой проект поддержания уровня Рн при подаче крахмала на клеильный пресс? Других вопросов я не заметил.

capzap
07.05.2013, 13:00
Я не "обижен" общением с контроллерами разных поставщиков, скачать проект не пролема и даже защита от просмотра не преграда. Мне не нужен Ваш проект как технология и так полно мусора на диске. Меня интересовало посмотреть все входы/выходы блока самому, а не с Ваших слов

kr1810bm86
07.05.2013, 13:06
Работа по modbus целиком скопирована с примера на сайте Сименса.
Думаю а этом можно закончить наш "плодотворный" диалог.

kr1810bm86
07.05.2013, 15:19
четвёрка спереди, просто обозначение что это Holding Registers
0 - Output coil (дискретные выходы)
1 - Discrete Inputs (дискретные входы)
3 - Input Registers (входные регистры)
4 - Holding Registers (регистры хранения)
5 - как тип 4, но производится перестановка байт

Как в вашей проге указывается обращение к регистрам хранения? от этого и будет зависеть с каким кодом в порт уйдёт запрос к регистру 0001, а если пишут 40001 to 49999, то тут ещё и смещение на единицу присутствует.
-------------------------
т.е. 400001 это регистр хранения читаемый кодом 03 с номером 0

Все заработало!!
Спасибо за помощь. В общем надо к адресам, что приводятся в руководстве для ТРМ-201, для чтения добавлять волшебное число 40001.
Думаю по записи будет та же история.