RTWin предоставляет возможность интеграции в проект PhAB приложения в качестве модуля. На модульной схеме он показывается серым цветом и рассматривается как особого вида объект. Как и другие объекты, он имеет входы и выходы и может быть соединен с другими модулями проекта.
Предполагается использование PhAB версии не ниже 1.10. Для приложений, созданных в более ранних версиях PhAB, необходимо выполнить операцию Appication/Convert to Multiplatform. При этом если ранее в файле Makefile в директории src/ PhAB приложения были добавлены вручную имена файлов в строки
MYSRC =
MYOBJ =
MYHDR =
то теперь их следует перенести в файлы indSfiles, indOfiles и indHfiles соответственно.
Пример использования PhAB приложения в качестве объекта содержится в директории /usr/rtw/apps/phapp, где находится немного измененное PhAB приложение rebound и проект rtwinph, использующий rebound в качестве объекта.
![]() | PhAB приложение и RTWin-проект всегда должны находиться на одном и том же узле сети. |
После этого PhAB приложение "превратится" в объект RTWin проекта и уже не будет запускаться самостоятельно.
![]() | В PhAB теперь не следует выполнять операцию Application/Build+Run/Make. При необходимости выполняйте в PhAB операцию Application/Build+Run/Generate, а затем в редакторе схем RTWin пункт меню Application/ Make. |
В объект поместите блок типа С-функция. Если вход этого блока связать с выходом блока типа Input, то внутри самой функции можно использовать приходящие в объект данные. Чтобы использовать Ap* или Pt* функции и имена виджетов ABW_* , в начало файла, содержащего текст С-функции, необходимо добавить строки:
#include <Ph.h>
#include <Pt.h>
#include <Ap.h>
#include "abimport.h"
Пример:
/* Standard headers */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
/* Local headers */
#include <Ph.h> //----------------
#include <Pt.h> //Добавьте
#include <Ap.h> //эти строки
#include "abimport.h" //----------------
#ifdef RTDEF_draw_ph
void
draw_ph( __draw_ph *ts_ptr )
{
PtArg_t args[2];
char buf[10];
sprintf(buf,"%d",RID(cnt));
PtSetArg(&args[0],Pt_ARG_TEXT_STRING,buf,0);
PtSetResources(ABW_WriteCh,1,&args);
//eliminate "not referenced" warning:
ts_ptr=ts_ptr;
}
#endif
Из любой функции ( например, callback-функции) PhAB приложения можно осуществить запись данных в выходной канал объекта. Для этого следует:
Присвоить значения входам блока типа Output можно с помощью макросов вида: _RID(ИмяБлока, ИмяВхода). Для каждого выхода объекта генерируется функция с именем _write_[ИмяВыхода](), осуществляющая запись в канал. Чтобы использовать макросы _RID(...) и функции _write_*, в начало файла необходимо добавить строку:
#include "import_[ИмяОбъекта].h"
Обратите внимание, что здесь используется имя объекта, присвоенное в редакторе объектов, а не имя модуля на схеме.
Пример:
/* Local headers */
#include "abimport.h"
#include "proto.h"
#include "import_Obj_CP.h" // Добавьте эту строку
int
WriteChan( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )
{
/* eliminate 'unreferenced' warnings */
widget = widget, apinfo = apinfo, cbinfo = cbinfo;
_RID(Out_Num_1,element_1)++;
_write_Out_Num_1();
return( Pt_CONTINUE );
}