EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

Работа с модулем I-7015 (ICP_DAS серия I-7000).


Author Message
Written on: 14. 01. 2011 [11:33]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
Скажите пожалуйста, как я могу собирать данные с модуля I-7015? Он не значится среди поддерживаемых модулем DCON. Нужно ли для этого дорабатывать данный модуль или есть другие пути решения?
Written on: 14. 01. 2011 [12:23]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Попробуйте прочитать с него как с I-7017. Вариантов подключения много. Можно добавить модуль в существующий драйвер, но лучше переделать для поддержки любых блоков по DCON. Чем и занимаюсь. Можно в ява написать программу обмена:
http://oscada.org/ru/forum/posts/vnedrenie/opros_ustroistv_po_sobytiju/

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 14. 01. 2011 [14:27]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
Спасибо, попробую!...как только разберусь с портом: http://oscada.org/ru/forum/posts/otslezhivanie_oshibok/oshibka_podkljuchenija_k_posledovatelnomu_portu/#pid
:wink:
Written on: 19. 01. 2011 [16:00]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
Almaz, прочитать как с I-7017 не получается - все значения = 0, ошибка длины пакета.
Создал "Выходной транспорт" последовательного интерфейса, запускаю, пробую отправить запрос (скажем, команда запроса конфигурации модуля- "$022" в текстовом режиме) - вылетает ошибка "Время исчерпано!".

еще такой вопрос: использовать "Пользовательский протокол" возможно с "Выходным транспортом"? Или как иначе делать запросы к модулям?
Written on: 19. 01. 2011 [18:25]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
нюанс с запросом решен!...оказалось, что при вводе команды необходимо вставлять символ возврата каретки, тогда приходит ответ от модуля: "$022\r"

P.S. кстати, при посылке еще одного запроса (второго, команда та же), программа виснет.

но вопрос сбора данных с модуля остается открытым!

[This article was edited 1 times, at last 19.01.2011 at 18:32.]
Written on: 20. 01. 2011 [10:59]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Для меня открыт вопрос опроса любых модулей по протоколу DCON (чтобы не городить для каждого блока ввода-вывода свои процедуры в исходнике OpenSCADA). Всё что нужно для опроса любых устройств из явы обсуждалось в теме:
http://oscada.org/ru/forum/posts/vnedrenie/opros_ustroistv_po_sobytiju/
Пробуйте сделать в ява - знание пригодится!

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 24. 01. 2011 [18:12]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
Дополнил DCON-модуль кодом для 7015 модуля, данные собираются. Может оно и не пригодится никому, просто у меня проект "горит". Модуль аналогичен полностью I-7017, кроме того, что у него 6 (AI) против 8.

измененные участки кода DCON_client.cpp:
...

tpPrmAt(t_prm).fldAdd( new TFld("MOD_TP",_("I-7000 module type"),TFld::Integer,TFld::Selected|TCfg::NoVal,"1","0","0;1;2;3;4;5;6;7",_("I-7051;I-7045;I-7063;I-7017;I-7024;I-7015;NL-8AI;HostOK")) );

...
//> Read DAQ parameter's for I-7015 module
case 5:
{
//> Request with I-7015 module
pdu = "#" + HexSymbol[15 & (cntr.p_hd[i_p].at().mod_addr>>4)] + HexSymbol[15 & cntr.p_hd[i_p].at().mod_addr];
if (cntr.p_hd[i_p].at().crc_ctrl) pdu+=cntr.DCONCRC(pdu);
if (cntr.p_hd[i_p].at().crc_ctrl) acq_len=45; else acq_len=43;
// cout << pdu.substr(0,pdu.size()) << " writing\n";
cntr.p_hd[i_p].at().acq_err=cntr.DCONReq(pdu);
// cout << pdu.substr(0,pdu.size()-1) << " reading\n";

//Check errors
cntr.p_hd[i_p].at().acq_err=_("No errors");
cntr.p_hd[i_p].at().module_err=false;
if ((pdu.size()-1)!=acq_len) {cntr.p_hd[i_p].at().module_err=true; cntr.p_hd[i_p].at().acq_err=_("Module packet length error");}
if ((!cntr.p_hd[i_p].at().module_err)&&(pdu.size()>0)) if (pdu.substr(0,1)!=">") {cntr.p_hd[i_p].at().module_err=true;cntr.p_hd[i_p].at().acq_err=_("Invalid module response");}
if ((cntr.p_hd[i_p].at().crc_ctrl)&&(!cntr.p_hd[i_p].at().module_err)&&(pdu.size()>44)) if ((pdu.substr(43,2))!=(cntr.DCONCRC(pdu.substr(0,43)))) {cntr.p_hd[i_p].at().module_err=true;cntr.p_hd[i_p].at().acq_err=_("Invalid module CRC");}

//Set DAQ attributes
if ((!cntr.p_hd[i_p].at().module_err)&&(pdu.size()>42))
{
cntr.p_hd[i_p].at().AI[0]=atof(pdu.substr(1,7).c_str());
cntr.p_hd[i_p].at().AI[1]=atof(pdu.substr(8,7).c_str());
cntr.p_hd[i_p].at().AI[2]=atof(pdu.substr(15,7).c_str());
cntr.p_hd[i_p].at().AI[3]=atof(pdu.substr(22,7).c_str());
cntr.p_hd[i_p].at().AI[4]=atof(pdu.substr(29,7).c_str());
cntr.p_hd[i_p].at().AI[5]=atof(pdu.substr(36,7).c_str());
}
break;
}

...

//>> Make DAQ parameter's for I-7015 module
case 5:
{
p_el.fldAdd( new TFld("module_err","module_err",TFld::Boolean,TFld::NoWrite|TVal::DirRead,"","","","",smodTp.c_str()) );
for( int i_p = 0; i_p < 6; i_p++ )
p_el.fldAdd( new TFld(TSYS::strMess("AI%d",i_p).c_str(),TSYS::strMess("AI%d",i_p).c_str(),
TFld::Real,TFld::NoWrite|TVal::DirRead,"","","","",smodTp.c_str()) );
break;
}

соответственно, изменил порядок case'ов. надеюсь, ничего не забыл :)
Attachment

DCON_client.cpp (File type: text/x-c++src, Size: 35.11 kilobytes) — 1608 downloads
Written on: 24. 01. 2011 [18:15]
TY_Obninsk
Илья Клемышев
Topic creator
registered since: 14.01.2011
Posts: 63
Almaz, у меня в наличии имеются I-7060D и I-7018, если вдруг понадобятся для испытаний протокола или еще зачем-нибудь!
Written on: 25. 01. 2011 [07:16]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Пригодятся... Вам проще оказалось сделать в си++, чем в ява. Аналогично можно прицепить любую железку с известным протоколом.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



21482