This is topic Связь с контроллером CombiGauge. in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000130.html

Posted by Kayrat Gatiyatov (Участник № / Member № 5414) on :
 
У нас имеется контроллер 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 :
 
Об этом есть учебный фильм http://www.adastra.ru/news/tm6077/
 
Posted by Kayrat Gatiyatov (Участник № / Member № 5414) 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 :
 
По причине перегруженности вопросами, слабо связанными с исходной темой, топик закрывается.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2