Добрый день, уважаемая техподдержка. Подскажите, пожалуйста, как быть в такой ситуации. Имеются конвейерные весы с непонятным протоколом обмена следующего вида(запрос-ответ): синхробайт/длина пакета без КС/адрес весов/адрес ведущего ус-ва/команда/адрес переменной/данные/КС. Этакая смесь ModBus'а с непонятно чем. Какими средствами ТМ я могу получать данные с такого устройства?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Посмотрите раздел "Обмен по произвольному протоколу по RS". Только контрольную сумму считать и подставлять придется самостоятельно.
Posted by Kollega (Участник № / Member № 4097) on :
А можно какой-нибудь пример работы с t11? Потому что после прочтения хелпа все стало еще больше непонятно. На сайте адастры я примеров не нашел, хотя вроде бы раньше они там были. мыло karabutoleg@mail.ru
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Любой обмен с модулями, например, I-7000 или по Modbus RTU использует спецификацию драйверов Type11.
Posted by Kollega (Участник № / Member № 4097) on :
Добрый вечер, уважаемая техподдержка! Обмениваться по произвольному протоколу по RS я научился но возникли вопросы. Если мне надо опросить трое весов со своими адресами, то следовательно в запросе надо менять их адрес. Но в помощи написано, что аргументы канала call, не должны иметь привязки. Следовательно, получается запрос на опрос одних весов. Привязку я все-таки делал и менять адреса получалось, но плохо, что опрос идет непрерывно. Как мне сделать так, чтоб запрос происходил только когда мне надо? Изменение периода опроса канала call ничего не дает. Связь прекращается только когда канал выключаешь. Подскажите, пожалуйста.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Аргументы канала CALL, реализующего запрос по произвольному протоколу RS, не должны сами непосредственно привязываться к чему-нибудь. Но можно осуществить привязку к ним, например, со стороны аргументов CALL, вызывающего программу.
2. Можно задать каналу, опрашивающему "Источник", период "Однократно" и включать его (сбрасывать атрибут СОСТОЯНИЕ в 0) по определяемому Вами событию.
Posted by Kollega (Участник № / Member № 4097) on :
Подскажите, а возможно ли использовать com порт в ТМ как Slave? То есть, передавать данные от ТМ в другую систему по запросу?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Можно. Но надо писать отдельный драйвер. Сложность драйвера будет зависеть от протокола обмена.
Posted by Kollega (Участник № / Member № 4097) on :
Возник еще один вопрос. Работаю по RS по своему протоколу. Посылаю запрос с помощью аргументов типа STRING. Все посылается нормально. В ответ посылаю 1,2,3 (например) тоже в аргументы типа STRING и ничего не получаю. Хотя портмон показывает, что данные приняты и связь не пропадает. Меняю тип на USINT и все получаю нормально. Но это числа, а не символы. Не хочется писать преобразование из hex v acsii. И что это за странная фраза в хелпе:"В 1-байтовый приемный аргумент пишется 1 байт данных в 2-байтовом формате, при этом значение старшего байта МРВ не контролирует."? Посмотрел call.vector, но это если команда одна, то хорошо, а если разные?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вы используете механизм "Обмен по произвольному протоколу по RS"?
"В 1-байтовый приемный аргумент пишется 1 байт данных в 2-байтовом формате, при этом значение старшего байта МРВ не контролирует." означает, что при обяъвленном типе данных в приемном аргументе SINT или USINT принятый результат будет будет записан в аргуммент в виде 2-байтового числа, в котором принятый байт будет помещен в младший байт, а старший байт - не контролируется.
В каком формате Вы в ответе посылаете числа? В текстовом или числовом? Драйвер "Обмен по произвольному протоколу по RS" устарел, механизм работы со строковыми аргументами не был завершен.
При работе с ASCII-протоколами целесообразно использовать каналы VECTOR.
Если при использовании механизма канала Vector у Вас несколько команд, то Вам надо создавать несколько шаблонов или варьировать значения атрибутов удаленного адреса, чтобы модифицировать посылаемые команды.
Posted by Kollega (Участник № / Member № 4097) on :
Посылаю 1 как 0x31, получается в числовом. Далее привязываю его к аргументу стринг экрана, но вижу не 1,а dec(0x31). Про несколько шаблонов ясно, а вот "варьировать значения атрибутов удаленного адреса, чтобы модифицировать посылаемые команды" не совсем. Вы имеете в виду поле Дополнительно в канале в Источниках приемниках? Разве к нему есть динамический доступ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
" SENDCMD=<команда> – набор байтов в формате HEX без префикса "0x" для посылки (для бинарных и ASCII протоколов). Кроме 0..F, набор может содержать следующие предопределенные выражения/символы: c<0..5> – подставляется соответствующий байт удаленного адреса ((93, C0)..(98, C5)); i<0..2> – подставляется соответствующее слово удаленного адреса ((90, I0)..(92, I2)); I<0..2> – то же, что i<0..2>, но в ((90, I0)..(92, I2)) меняется порядок следования байтов; "
Если заданы соответствующие ключи в тексте команды, изменение атрибутов 90, ..., 98 в реальном времени позволяет несколько модифицировать текст посылаемого запроса.
Posted by Kollega (Участник № / Member № 4097) on :
Уважаемая техподдержка! Начал разбираться с СALL.Vector, чтобы получить строку по RS. Ознакомился с Вашим примером на сайте. Все пошло нормально. Теперь мне надо получить строку такого вида"0R1,Dn=236D<cr><lf>". Думал по аналогии с СALL.ChGroupReq добавлять аргументы, но записывает только в первый. Как мне получить строковый ответ? HELP, очень важно. Строка может быть произвольной длины.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Обратитесь по электронной почте в Техническую Поддержку.
Опишите поставленную задачу и изучаемый Вами пример по CALL.Vector
Posted by Kollega (Участник № / Member № 4097) on :