УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

[BugFixed] Выходной транспорт последовательного интерфейса


Автор Повідомлення
Повідомлення створено: 05. 08. 2010 [17:24]
andrelek
Андрей Полевой
Автор теми
Зареєстрован(а) с: 13.12.2008
Повідомлення: 210
Здравствуйте! Не удается получить 20 байтный ответ через ком-порт, приходит не полный ответ, опрашиваю из функции через пользовательский протокол.
Получаю его только на странице настройки исходящего транспорта вкладка "Запрос" если установить галочку "Ожидать тайм аут", но если галочку убрать то приходит не полный ответ.
Подскажите в чем может быть проблема?
Повідомлення створено: 05. 08. 2010 [19:39]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Если Вы ожидаете ответа по теме, а не наставлений о том как нужно задавать вопросы, то указывать конкретный код и функцию нужно!

Learn, learn and learn better than work, work and work.
Повідомлення створено: 06. 08. 2010 [09:09]
andrelek
Андрей Полевой
Автор теми
Зареєстрован(а) с: 13.12.2008
Повідомлення: 210
Вот скрипт функции с помощью которой делаю запрос, это протокол ModBus на получение 15регистров, имею на столе такое устройство, реально пишу протокол для нестандартного устройства где ответ будет равен 25 байтам.


using Special.FLibSYS;
using sub_DAQ.mod_JavaLikeCalc;
ques="01 03 0b be 00 0f 67 ce";

req = SYS.XMLNode("myprot"icon_wink.gif;
req.setAttr("ProtIt","test"icon_wink.gif.setText(Special.FLibSYS.strEnc2Bin(ques));
SYS.Transport.Serial.out_testModBus.messIO(req,"UserProtocol"icon_wink.gif;

status = req.attr("status"icon_wink.gif;
rez=req.attr("result"icon_wink.gif;


Вот выходной скрипт пользовательского протокола test


using Special.FLibSYS;
req=strDec4Bin(io.text());
rez=strDec4Bin(tr.messIO(io.text(),3000)); //здесь таймаут ожидания пробовал менять разный, и вообще не указывать также

SYS.messDebug("us_prot_test:req",req);
SYS.messDebug("us_prot_test:rez",rez);

io.setAttr( "status", (rez!=""icon_wink.gif ? "online" : "offline" );
io.setAttr("result", rez);
SYS.messDebug("us_prot_test:io",io.save( 0x08 ));


Это получаю если исполняю функцию (вкладка исполнить)

1|/WorkSt/sub_UI/mod_QTCfg/ | root| Нажат </WorkSt/sub_DAQ/mod_JavaLikeCalc/lib_sql/fnc_myprot/%2fexec%2fcalc>!
0|us_prot_test:req | 01 03 0b be 00 0f 67 ce
0|us_prot_test:rez | 01 03 1e 42 55 c5 eb bf
0|us_prot_test:io | <myprot ProtIt="test" result="01 03 1e 42 55 c5 eb bf " status="online">


Вот настройки выходного транспорта

/dev/ttyS0:19200:8E1 тайминги пробовал от такого 586:5.73 до такого 3000:500

Вот что получаю с помощью выходного траспорта (вкладка запрос):
1.Получаю полный ответ (смотрю по количеству запрошенных байтов) когда галка "Ожидать таймаут" установлена принтскрин в файле norma.png
2.Получаю неполный ответ если галку убираю, такая же ситуация и при запросе из функции, файл not_norma.png

Подскажите где я что не правильно делаю, как получить полный ответ в функцию?
Честно говоря не знаю как смайлики отключить....

[Повідомлення редагувалось 1 раз(ів), останній раз 06.08.2010 в 09:17.]
Вкладений файл

norma.png (Тип файлу: image/png, Розмір: 86.8 кілобайтів) — 2016 завантажень
not_norma.png (Тип файлу: image/png, Розмір: 84.26 кілобайтів) — 2039 завантажень
Повідомлення створено: 06. 08. 2010 [13:12]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"andrelek" wrote:

using Special.FLibSYS;
using sub_DAQ.mod_JavaLikeCalc;
ques="01 03 0b be 00 0f 67 ce";

req = SYS.XMLNode("myprot" );
req.setAttr("ProtIt","test" ).setText(Special.FLibSYS.strEnc2Bin(ques) );
SYS.Transport.Serial.out_testModBus.messIO(req,"UserProtocol" );

status = req.attr("status" );
rez=req.attr("result" );

Это не ошибка, а не понимание Вами назначения того, что используете.
Вызов не корректен. Форум по прежнему не читаем.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 06. 08. 2010 [17:26]
andrelek
Андрей Полевой
Автор теми
Зареєстрован(а) с: 13.12.2008
Повідомлення: 210
using Special.FLibSYS;
//эта строка в этом скрипте на данный момент не нужна
using sub_DAQ.mod_JavaLikeCalc;
//непосредственно запрос
ques="01 03 0b be 00 0f 67 ce";
//создание xml узла, какое название не имеет значения, как я понял из экспериментов
req = SYS.XMLNode("myprot" );
//идентификация пользовательского протокола, и установка самого запроса в бинарном виде
req.setAttr("ProtIt","test" ).setText(Special.FLibSYS.strEnc2Bin(ques) );
//отправка запроса в транспорт через пользовательский протокол
SYS.Transport.Serial.out_testModBus.messIO(req,"UserProtocol" );
// получение статуса, атрибут добавляется в узел в пользовательском протоколе
status = req.attr("status" );
//получение ответа,атрибут также добавляется в протоколе,
rez=req.attr("result" );

предполагал что ответ помещается в req.text() но там остается отсылаемый запрос
Укажите пожалуйста где я ошибаюсь, или вышлите пример скрипта, banghead.gif
Повідомлення створено: 06. 08. 2010 [21:13]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Я вроде ясно сказал - форум читайте внимательно!
Это Вам не коммерческая техническая поддержка (ТП), где Вам обязаны отвечать на вопросы любого уровня и многократно.
И даже для ТП я мог-бы на подобные вопросы не реагировать в течении трёх дней.

Кроме того, этот раздел обсуждения для сообщения об ошибках, а это не ошибка!

Learn, learn and learn better than work, work and work.
Повідомлення створено: 07. 08. 2010 [12:11]
andrelek
Андрей Полевой
Автор теми
Зареєстрован(а) с: 13.12.2008
Повідомлення: 210
Я понял. Большое спасибо!
Разобрался все работает. Не хватало "дожидания" полного ответа, описано здесь http://oscada.org/ru/forum/posts//opros_ustroistv_po_sobytiju//1/

Кстати в демо-проэкте в скрипте UserProtocol --> test (обновляюсь с "svn co ....." Checked out revision 1119) , если конечно уже не исправлено

//вот в этой строке полученные данные декодируются из бинарного вида
rez=Special.FLibSYS.strDec4Bin(tr.messIO(io.text()));
while(true)
{
//а здесь не декодируются, хотя потом добавляются к декодированным
trez = tr.messIO(""icon_wink.gif;
if( !trez.length ) break;
rez+=trez;
}
io.setAttr( "status", (rez==io.text()) ? "online" : "offline" );

[Повідомлення редагувалось 2 раз(ів), останній раз 09.08.2010 в 12:03.]



1238