Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ОТКРЫТЫЕ ФОРУМЫ / OPEN FORUMS » TRACE MODE 6 бесплатная версия / TRACE MODE 6 Free version » Однократная передача данных по произвольному интерфейсу

   
Автор / Author Тема / Topic: Однократная передача данных по произвольному интерфейсу
Judchin
Junior Member / Новичок
Участник № / Member № 6455


Icon 1 отправлено / posted      Профиль для / Profile for Judchin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день!
Есть задача: Подружить электронную нагрузку Актаком 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?
Или может есть другое решение?

Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Атрибуты Request и Response это компоненты атрибута 52 (см. раздел "Атрибуты каналов, отображаемые профайлером").
2. Мы не владеем протоколом SCPI. Судя по тому, что Вы создали "Канал Call.Vector без аргументов", Вы не ожидаете ответа на переданную команду.
В этом случае следует задавать у конце строки, которую Вы передаете в атрибут 47, ключ
BYTESREAD=0;
(количество читаемых байтов равно 0).

Сообщения / Posts 15119 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Judchin
Junior Member / Новичок
Участник № / Member № 6455


Icon 1 отправлено / posted      Профиль для / Profile for Judchin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо ключ BYTESREAD=0; помог!
Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Judchin
Junior Member / Новичок
Участник № / Member № 6455


Icon 1 отправлено / posted      Профиль для / Profile for Judchin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Еще вопрос в продолжении темы.
Строку для 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]

Сообщения / Posts 11 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пример такой программы

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-формате.

Сообщения / Posts 15119 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2