This is topic Однократная передача данных по произвольному интерфейсу in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


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

Posted by Judchin (Участник № / Member № 6455) on :
 
Добрый день!
Есть задача: Подружить электронную нагрузку Актаком 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) в течение заданного таймаута, канал не выключается, в нем устанавливается флаг аппаратной недостоверности, и в дальнейшем канал периодически генерирует запросы (до получения ответа);"

Что такое и откуда берутся Request и Response?
Или может есть другое решение?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Атрибуты Request и Response это компоненты атрибута 52 (см. раздел "Атрибуты каналов, отображаемые профайлером").
2. Мы не владеем протоколом SCPI. Судя по тому, что Вы создали "Канал Call.Vector без аргументов", Вы не ожидаете ответа на переданную команду.
В этом случае следует задавать у конце строки, которую Вы передаете в атрибут 47, ключ
BYTESREAD=0;
(количество читаемых байтов равно 0).
 
Posted by Judchin (Участник № / Member № 6455) on :
 
Спасибо ключ BYTESREAD=0; помог!
 
Posted by Judchin (Участник № / Member № 6455) on :
 
Еще вопрос в продолжении темы.
Строку для 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) [Пдмигивание / Wink]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Пример такой программы

PROGRAM
VAR_INPUT Current_Time : STRING; END_VAR
VAR_OUTPUT CMD : STRING; END_VAR

CMD="SENDCMD=37410701"+Current_Time+"0000;";

END_PROGRAM

Число Current_Time получено из канала HEX32 в HEX-формате.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2