Тема / Topic: Однократная передача данных по произвольному интерфейсу
Judchin
Junior Member / Новичок
Участник № / Member № 6455
отправлено / posted
Добрый день! Есть задача: Подружить электронную нагрузку Актаком AEL-8320 и TM6 по протоколу SCPI (интерфейс RS-232) пример команды (ASCII): "mode crl" Для этого создал: 1. Источники/приемники -> пользовательские драйверы -> TYPE11 -> UniversalPLC_type1. Направление Output. Строку дополнительно буду формировать отдельно. 2. Система -> RTM ->Com-порт. С опцией Host Variant 3. Канал Call.Vector без аргументов. Период пересчета однократно. Канал привязан к источникам/приемникам. 4. Несколько каналов для привязки параметров на экране. 5. Программу на языке ST в которой формируется команда и записывается в атрибут 47. 6. Далее установкой "1" в атрибут 39 (отработать) или 3 (In) отправляю команду на устройство. Но команда начинает отправляться в постоянно (атрибут отработать автоматически не сбрасывается), пока вручную не сброшу флаг. Документация говорит " (14) однократно – только для каналов асинхронного обмена. После генерации запроса (Request=1) канал ждет ответа; если ответ получен, Response=1 и канал выключается; если ответа нет (Request=1, Response=0) в течение заданного таймаута, канал не выключается, в нем устанавливается флаг аппаратной недостоверности, и в дальнейшем канал периодически генерирует запросы (до получения ответа);"
отправлено / posted
1. Атрибуты Request и Response это компоненты атрибута 52 (см. раздел "Атрибуты каналов, отображаемые профайлером"). 2. Мы не владеем протоколом SCPI. Судя по тому, что Вы создали "Канал Call.Vector без аргументов", Вы не ожидаете ответа на переданную команду. В этом случае следует задавать у конце строки, которую Вы передаете в атрибут 47, ключ BYTESREAD=0; (количество читаемых байтов равно 0).
Сообщения / Posts 17347 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Judchin
Junior Member / Новичок
Участник № / Member № 6455
Judchin
Junior Member / Новичок
Участник № / Member № 6455
отправлено / posted
Еще вопрос в продолжении темы. Строку для 47 атрибута формирую в программе: При этом строку пишу символами в нижнем регистре, а строка отправляется в верхнем. Это оказалось критично. Как отправлять в нижнем?
code:
PROGRAM VAR_INPUT Mode : UINT; END_VAR VAR_INPUT Value : UINT; END_VAR VAR_OUTPUT S : STRING; END_VAR
S = 'SENDCMD='; if Mode == 0 then S = S + 'syst:rem'; elsif Mode == 11 then S = S + 'res' + Value; end_if; S = S + ';BYTESREAD=0;CRLF;ASCII;';
END_PROGRAM
Попробовал формировать строку из HEX'ов, работает для "простых" команд: S = S + '737973743A72656D0D0A';//syst:rem Но не знаю как значение переменой "Value" склеить со строкой представленной HEX-кодом S = S + 'res' + Value; аналог на языке си (sprintf(S, "res %x\n\r", Value)
Сообщения / Posts 11 | Из / From: Россия
| IP / IP: IP адрес / IP address |