This is topic Связь с контроллером CombiGauge. in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
У нас имеется контроллер CombiGauge. К нему подключаются турбо-молекулярный, форвакуумный насосы и вакуумные датчики. Задача состоит в том, чтобы снимать показания датчиков и управлять насосами. Обмен данными между компьютером и контроллером CombiGauge осуществляется посредством обмена текстовыми сообщениями в ASCII кодировке. Хотел реализовать это при помощи спец. функций ST-программ outp(), но она рабоает только под DOS. Есть ли в TraceMode возможность подавать 16-ричные коды в контроллер напрямую без написание dll-библиотеки? Илм есть какой-нибудь протокол для передачи текстовых команд в контроллер?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Текстовые протоколы могут быть реализованы с помощью механизма "Обмен по произвольному протоколу по RS" или с помощью канала CALL.Vector, привязанного к "Источнику", в строке "Дополнительно" которого задается текст команды.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Спасибо за информацию.
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Какая максимальная длина ответа по произвольному протоколу для канала CALL.СhGroupReq?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Не более 8 КБ.
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Ответ получаю в 16-ричной кодировке. Как мне теперь преобразовать ответ в строку или число? Есть ли какой-нибудь встроенный алгоритм декодирования или надо самому его прописывать.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Задачу преобразования следует решать с помощью Вашей пользовательской программы. Если использовать механизм канал CALL.Vector, то подобных проблем можно избежать.
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
всё разобрался. спасибо за помощь!
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
У меня возник ещё один вопрос. Контроллер, подключённый к компьютеру через COM порт, управляет одним форвакуумным насосам и снимает данные с 3 датчиков. Бывает так что подряд подаётся 2 запроса. а приходит один ответ с контроллера. Настраивается ли приоритет подачи сигналов в СОМ порт?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Асинхронный поток запросов по COM-порту реализуется в полудуплексном режиме. Транзакции (запрос-ответ) организуются последовательно с учетом периодов обработки каналов и их ID. Каждый запрос ожидает ответ в течение таймаута, заданного Вами в настройках COM-порта. Если Величина таймаута должна превышать возможное время задержки ответа от устройства. Изменить приоритет одного канала запроса нельзя. Можно управлять атрибутом СОСТОЯНИЕ - выключенный канал запросы не посылает.
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Я привязал канал Call.Vector к источнику UniversalPLC_type3_1. Если я в строке Дополнительно задаю запрос вида: 12 34 56 78 90 12 34 56 78 90 12 34 56 78 и смотрю через сниффер ком-порта. На ком-порт посылается запрос 12 34 56 78 90 12 34 56 78 90 12 34 56 78 e9 60 7c. Что это за три дополнительных байта? А если я задаю запрос вида: 3e 30 3a 53 65 6e 73 44 69 61 67 20 30 0d, то на ком-порт вообще приходит запрос только три байта: ff ff 7c. Откуда они берутся?
Posted by Nico (Участник № / Member № 5342) on :
Желательно всю строку в поле "Дополнительно" сообщить целиком.
[ 10.02.2012, 09:00: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
SENDCMD=3e303a53656e734469616720300d;BYTESREAD=45;NREAD=1;VFRF2;
Posted by Nico (Участник № / Member № 5342) on :
Назначение порта какое (VARIANT)? 123,126 атрибуты канала вектор чему равны ? (VECTOR)(111.0) Команда набирается заглавными Поставте отладку RS(DEBUGON=200 в cnf файле)
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Назначение порта HostVariant. 123 = "VECTOR", 126 = "(C1)111.0_p0".
Posted by Nico (Участник № / Member № 5342) on :
Команда набирается заглавными Поставте отладку RS(DEBUGON=200 в cnf файле)
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Как её поставить?
Posted by Nico (Участник № / Member № 5342) on :
строка DEBUGON=200 в cnf файле лишнии байты это контрольная сумма(CRCNO; - для отмены)
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Создал файл TMcom_1.cnf и прописал строку DEBUGON=200, а дальше что делать. Для чего нужна отладка RS? Убрал контр. сумму и при задании строки 3e 30 3a 53 65 6e 73 44 69 61 67 20 30 0d, она всё равно не посылается в ком-порт.
Posted by Nico (Участник № / Member № 5342) on :
Команда набирается заглавными ? "SENDCMD=3E303A53656E734469616720300D"
DEBUGON=200 это и есть отладка RS ее результат смотрим в файле
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
На ком-порт приходит ответ: <0 14:Vid=0.55, Umes=6.17182, Press=0.0000681522 3. Что надо прописать, чтобы вывести значение 0.0000681522 на экран?
Posted by Nico (Участник № / Member № 5342) on :
Протокол не бинарный ! ASCII;CR;SEPARATOR==;SREAD=:; периписать SENDCMD в ASCII виде в VECTORE - 3 аргумента
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Прописал в строке Дополнительно: SENDCMD=>0:SensDiag 0;ASCII;CR;SEPARATOR==;SREAD=:; в VECTORE добавил 3 аргумента. Ответ приходит на запрос, привязал к экрану аргументы VECTORА, но они всё равно не выводятся. Может я что-то не так прописал?
Posted by Nico (Участник № / Member № 5342) on :
не надо пока привязывать добейтесь чтобы в аргументах канала VECTOR были нужные значения(смотрим в окне компонентов)
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Почти получилось, но вот в чём проблема: ответ приходит вот такой <0 14:Vid=0.55, Umes=6.17182, Press=0.00006815223. Длина ответа 50 байт, что я и указал в запросе: SENDCMD=>0:SensDiag 0;ASCII;CR;BYTESREAD=50;SEPARATOR==;SREAD=:; ARG_001 и ARG_002 выводятся правильно, а вот ARG_000=5, хотя по ответу видно что он должен быть равен 0,55. Если задаю длину ответа 49 байт, то значения выводятся так ARG_000=0, ARG_001=0,55, ARG_002=6.17182. В чём может быть проблема?
Posted by Nico (Участник № / Member № 5342) on :
BYTESREAD= не надо задавать(только для бинарки) Длина ответа зависит от значений параметров в нем CR -> означает в запрос добавить последний символ а при чтении ответа читать пока не придет CR
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Спасибо.
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
У нас разработан драйвер обмена по ASCII-протоколу с вакуумными контроллерами CombiGauge. Проблема заключается в том что одновременно подаётся 3-4 запроса к каждому контроллеру и он просто не успевает на них отвечать. При этом данные одного ответа на запрос записываются в другой ответ и при выводе на экране значения с одного датчика отображаются на 2-х датчиках. Ставил период пересчёта больше, всё равно тоже самое так как запросы идут подряд по одному COM-порту. Данные со снифера ком-порта: <0 14:Vid=0.68, Umes=8.92390, Press=0.372117 >0:SensDiag 2 >0:SensDiag 2 <0 14:Vid=0.21, Umes=5.70142, Press=1.192571 >0:SensDiag 0 =ё¶N“ЮZVЉrҒҒbC«µ•нхµ·SңОКg±®ҢYҮҮВr‚ЉЉКљВұj>0:SensDiag 1 <0 14:Vid=0.68, Umes=8.92394, Press=0.3722374 >0:SensDiag 2 >0:SensDiag 0 <0 14:Vid=0.55, Umes=5.71798, Press=0.01193793 >0:SensDiag 2 <0 14:Vid=0.21, Umes=5.70137, Press=1.19242 >0:SensDiag 0 <0 14:Vid=0.55, Umes=5.71798, Press=0.01193793 >0:SensDiag 1 <0 14:Vid=0.68, Umes=8.92390, Press=0.372094
Да и кстати периодически с контроллера приходит вообще не понятный ответ какие-то иероглифы, но это уже как я понимаю проблема самого контроллера.
И наконец вопрос можно ли сделать так чтобы следующий запрос не подавался пока не пришёл ответ на предыдущий, чтобы избежать данной ситуации. Так как эти значения в дальнейшем буду использовать для автоматики, то данная ситуация просто неприемлема.
Posted by Nico (Участник № / Member № 5342) on :
TM c COM портами работает в полудуплексном режиме: запрос - чтение ответа или таймаут( и ни как иначе).
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Поставил таймаут 5000 мс на СОМ4, на который подаются запросы к 3 датчикам. При отключенных контроллерах каждый запрос, как и положено, подаётся с периодом 5 секунд; но при включении контроллеров, все запросы подаются один за другим и только после этого идёт задержка(но не 5 секунд как положено, а около 1 секунды). Почему так происходит?
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
И ещё вопрос. А как настроить режим: запрос - чтение ответа?
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Причём задержка такая же как и при таймауте 0 мс. То есть выставленный таймаут просто игнорируется при подаче запросов к контроллеру.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Таймаут - это не задержка между транзакциями, а максимальное время ожидания ответа. Если ответ придет раньше, транзакция завершится и будет сформирован следующий запрос. Когда контроллеры выключены, время ожидания ответа максимально (5 с), когда контроллеры включены, время ожидания равно задержке ответа со стороны контроллера (видимо, 1 с). Таймаут Вам необходимо оставить сушественным, например, 1500 мс. Попробуйте подобрать значение параметра RS-передача: "RS-передача – задержка (в миллисекундах) между транзакциями (процедурами ЗАПРОС/КОМАНДА+ОТВЕТ)".
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
Здравствуйте, уважаемая Тех. поддержка! Я посмотрел обучающее видео по использованию произвольного протокола и у меня возник вопрос. В примере для декодирования используется специальная программа и значения записываются в канал HEX_16. У меня ответы приходят как показано выше. И я просто использую аргументы канала CALL.Vector, типа real. Не использую никаких программ, просто вывожу на экран значения аргументов канала. Так можно делать или надо именно как в примере? И можно ли потом использовать аргументы канала CALL.Vector в программе автоматизации или их нужно записывать в отдельные каналы?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Если Вас удовлетворяет формат получаемых данных, дополнительные преобразования осуществлять не нужно.
Если Вам в программе автоматизации нужны только текущие значения параметров, запрашиваемых с помощью каналов CALL.Vector, дополнительные каналы для этих параметров не нужны.
Необходимо также учитывать лицензионные ограничения, связанные с ипользованием CALL.Vector (см. описание канала CALL.Vector).
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
По причине перегруженности вопросами, слабо связанными с исходной темой, топик закрывается.