Тема / Topic: Подключение контроллера, не поддерживаемого ТМ
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Привет. Возник вопрос, есть контроллер с уже написанной программой, в программе реализован собственный протокол обмена данными по СОМ порту, мне необходимо осуществить обмен данными между ТМ и контроллером. Посоветуйте пожалуйста, как лучше организовать обмен: написать драйвер для ТМ или поправив программу в контроллере использовать один из встроенных протоколов (например М-Link). Если использовать встроенные протоколы, скажите пожалуйста где можно получить информацию о них?
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Привет Я попробовал написать свою программу, обеспечивающую обмен данными по протоколу M-Link. В общем, все заработало, как я хотел. Но у меня возникло несколько вопросов. 1. Как определить «сетевой» номер канала в “SLAVE” узле на этапе разработки/изменения базы каналов (я определил «покопавшись» в файле создаваемом профайлер-ом ). 2. Как определить величину таймаута, т.к. в ответе на запрос могут пересылаться атрибуты нескольких каналов и при низкой скорости и большом количестве каналов процесс пересылки займет много времени. 3. Определены ли протоколом действия при приходе ошибочных запросов/ответов (неправильные контрольная сумма, номер канала, число запрашиваемых каналов и т.д.). Заранее благодарю .
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1) Что имеется ввиду под "сетевым номером канала"? Адрес SLAVE-узла? Если да, то в ТМ он определяется настройкой "Индивидуальный сетевой адрес" в параметрах узла. Если SLAVE-узел - самодельное устройство с поддержкой M-Link5, то Вам надо завести в проекте узел-пустышку, чтобы его список каналов в точности повторял список тегов в Вашем устройстве (это необходимо для настройки параметров каналов для M-Link в узле-MASTER). Адрес для SLAVE-узла - либо поставит автоматически система при его создании, либо может задать пользователь вручную.
2) Величина таймаута - параметр экспериментальный. Устанавливается он в настройках СОМ-порта в параметрах узла, который находится в режиме MASTER.
3) Во-первых - есть канал подтипа ДИАГНОСТИКА и доп. к подтипу M_LINK (Host). А во-вторых - по каждому из каналов M-Link In или Out о достоверности обмена сигнализирует атрибут атрибут "Достоверность".
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
В общем я так и сделал. Создал в проекте узел «пустышку» (назначил его SLAVE), список каналов в нем совпадает с реальными в моем устройстве, затем в узле MASTER настроил параметры каналов для M-Link . Но в настройках NODE, CH, ATTR и OBJ указываются соответствующие названия из узла «пустышки», а в запросах/ответах M-Link используются их числовые эквиваленты. С NODE, ATTR и OBJ вопросов не возникло, а вот по какому правилу формируется числовой эквивалент CH (в руководстве по M-Link этот параметр называется nn-номер канала) и как он будет меняться при изменении количества или порядка следования каналов в моем узле я не понял.
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Номер канала - это его уникальный индекс в базе узла и назначается он системой автоматически. При удалении каналов из базы в списке индексов появляются так называемые "дырки", которые будут последовательно заполняться вновь создаваемыми каналами. Индексы каналов в узле можно получить тремя способами: 1) Экспортировав базу узла в какую-нибудь СУБД (например MS Access) по ODBC (можно не всю базу, а, например, только имя канала и его индекс). 2) Если Вы зададите для узла-пустышки тип узла как какой-нибудь из узлов контроллеров, то РБК в директории проекта всегда будет создавать файл типа <имя узла>.CHN, в котором в текстовом виде будут перечислены все каналы этого узла и их индексы в базе. 3) В РБК, выбрав канал в списке, его индекс можно увидеть в правом нижнем углу диалогового окна списка каналов объекта.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Здравствуйте В описании протокола M-Link сказано, что в ответ на запрос атрибута канала в поле DDDD посылается число типа float, а если канал имеет тип Н ?
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
А какая ему разница - ведь тип HEX у нас максимум 16-битный, в типе Float передается как целочисленное значение - разрядности Float для этого хватает.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Здравствуйте. У меня возник вопрос (в общем он не совсем по теме). Для контроля состояния связи я создал канал с подтипом Диагностика М-Link(host) I, при имитации обрыва линии связи (выключением slave контроллера) в канале возникает код ошибки 8. После восстановления связи код ошибки не исчезает(пытался послать в канал 0 - не помогло). Подскажите пожалуйста с чем это может быть связано. Заранее благодарю!
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Значение каналов диагностики всегда хранит состояние последнего события. Для того, чтобы его сбросить необходимо создать канал с тем же подтипом и дополнением к подтипу, но типа OUTPUT (смена значения с ненулевого на ноль - сброс состояния), либо через канал СИСТЕМНЫЙ_Сброс ошибок типа OUTPUT - любое изменение значения этого канала сбрасывает все признаки ошибок по всем диагностическим каналам узла.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611