Отчет о выполнении 1 этапа Государственного контракта № п 1116 от 26 августа 2009 г


Системные вызовы для доступа к ВВ-переменным



страница12/17
Дата31.07.2016
Размер1.18 Mb.
ТипОтчет
1   ...   9   10   11   12   13   14   15   16   17

4.3.3 Системные вызовы для доступа к ВВ-переменным

В SNDA разработаны специальные подпрограммы для доступа пользовательских SA-процедур к текущим значениям BB-переменных c целью чтения и/или модификации. Все локальные BB-переменные должны быть объявлены в скрипте. В этом нет необходимости, если SA-процедура взаимодействует с sys и snd глобальными переменными. Для доступа к BB-переменным предусмотрено 5 системных подпрограмм:

bbvc, bbvc1 - для доступа к целым и действительным BB-переменным;

bbvir, bbvir1 - для доступа к символьным BB-переменным;

bbvm - для доступа к элементам BB-массивов.

Порядок использования этих подпрограмм приведен ниже. Отметим, что в фортран программе имена переменных должны быть объявлены, как символьные строки. При обновлении переменных SA-процедура должна назначать необходимые значения, передаваемые в подпрограмму.

Единственное отличие между двумя вышеуказанными модификациями подпрограммы заключается в наличии (или отсутствии) кода возврата. Программы bbvc и bbvir не предусматривают его, так что если будет обнаружена ошибочная ситуация (например, отсутствие запрошенных переменных), задача выдает диагностику и завершается аварийно. Наоборот программы bbvc1 и bbvir1 снабжены кодом возврата, который может быть проанализирован вызывающей программой.

Подпрограмма bbvir может читать (писать) произвольное количество BB-переменных. Обращение к подпрограмме bbvir (писать/читать целое или действительное значение) должно быть оформлено следующим образом:


CALL BBVIR (STACK,ACT,TYPE,NAMES,VALUES,NUMBER)

где:



INTEGER STACK(*)

Системный параметр, передаваемый в SA-процедуру из внешней программы

CHARACTER ACT

Символ, определяющий операцию: R -чтение, W - запись

CHARACTER TYPE

Символ, определяющий тип ВВ-переменной: I - integer, F - real

CHARACTER*10 NAMEI()

Массив имен переменных

INTEGER/REAL VALUES()

Массив значений переменных

INTEGER NUMBER

Количество переменных

Подпрограмма bbvir1 имеет еще один параметр - RC:


CALL BBVIR1 (STACK,ACT,TYPE,NAMES,VALUES,NUMBER,RC)
INTEGER RC - код ошибки:

0 - нормальное завершение;

1 - неверен тип данных;

2 - BB-переменная не определена;

3 - неадекватный тип данных;

4 - неверен код операции;


Подпрограмма bbvc может читать (писать) только одну символьную переменную. Обращение к подпрограмме М (писать/читать символьную переменную) должно быть оформлено следующим образом:
CALL BBVC (STACK,ACT,NAME,VALUE,LEN)

где:



INTEGER STACK(*)

Системный параметр, передаваемый в SA-процедуру из внешней программы

CHARACTER ACT

Символ, определяющий операцию: R -чтение, W - запись

CHARACTER*10 NAMEI

Имя переменной

CHARACTER() VALUE()

значение переменной либо поле для приема этого значения

INTEGER len

Длина ВВ-переменной (приемного поля)

Подпрограмма bbvc1 имеет еще один параметр - RC:

CALL BBVC1 (STACK,ACT,NAME,VALUE,LEN, RC)
INTEGER RC - код ошибки:

0 - нормальное завершение;

2 - BB-переменная не определена;

3 - неадекватный тип данных;

4 - неверен код операции;
Для тестирования вышеописанных системных подпрограмм доступа к BB-переменным разработана программа TESTBB. Она может быть использована в качестве шаблона при разработке пользовательских SA-процедур.
SUBROUTINE TESTBB (STACK)
INTEGER STACK(*)

C --- STACK - SYSTEM VARYABLE, transmitted from main C-program

C--------------------------INEGERS BB-VARIABLES --------------------------

CHARACTER*10 NAMEI(3)

INTEGER*4 INTS(3)

C-------------------------REAL BB-VARIABLES -----------------------------

CHARACTER*10 NAMEF(3)

REAL FLOATS(3)

C-----------------------STRING BB-VARIABLE ------------------------------

CHARACTER*24 SS11

C--------------------------------------------------------------------------------------

PRINT *,'FORTRAN TESTBB STARTED'

C--------------------- READ FROM BLACK-BOARD ------------------------

NAMEI(1) = 'aa11'

NAMEI(2) = 'AA22'

NAMEI(3) = 'AA33'

CALL BBVIR (STACK,'R','I',NAMEI,INTS,3)

PRINT *,'aa11=',INTS(1), ' AA22=',INTS(2), ' AA33=',INTS(3)

NAMEF(1) = 'BB11'

NAMEF(2) = 'BB22'

NAMEF(3) = 'BB33'

CALL BBVIR (STACK,'R','F',NAMEF,FLOATS,3)

PRINT *,'BB11=',FLOATS(1),' BB22=',FLOATS(2),' BB33=',FLOATS(3)

CALL BBVC (STACK,'R','SS11',SS11,24)

PRINT *,'SS11=', SS11

C----------------------- WRITE TO BLACK-BOARD -------------------------

INTS(1) = INTS(1) +70

INTS(2) = INTS(2) +70

INTS(3) = INTS(3) +70

CALL BBVIR (STACK,'W','I',NAMEI,INTS,3)

FLOATS(1) = FLOATS(1) +70

FLOATS(2) = FLOATS(2) +70

FLOATS(3) = FLOATS(3) +70

CALL BBVIR (STACK,'W','F',NAMEF,FLOATS,3)

CALL BBVC (STACK,'W','SS11', 'XXXXXXXXXX YYYYYYYY',24)

PRINT *,'FORTRAN TESTBB ENDED'

END
Подпрограмма bbvm может читать (писать) один элемент BB-массива. Отметим, что обработка BB-массива возможна только в рамках скрипта.

Обращение к подпрограмме bbvm (писать/читать элемент BB-массива) должно быть оформлено следующим образом:


CALL BBVM (STACK,ACT,TYPE,NAME,INDEX,VALUE,RC)

где:



INTEGER STACK(*)

Системный параметр, передаваемый в SA-процедуру из внешней программы

CHARACTER ACT

Cимвол, определяющий операцию: R -чтение, W - запись

CHARACTER TYPE

Cимвол, определяющий тип ВВ-переменной: I - integer, F - real

CHARACTER*10 NAMEI

Имя массива

INTEGER/REAL/CHARACTER VALUE

Значение переменной

INTEGER RC

Код возврата (см. ниже)

RC - код возврата:

0 - нормальное завершение;

2 - BB-массив не определен;

3 - неадекватный тип данных;

4 - неверен код операции;

5 - неверен индекс;
Для тестирования системной подпрограммы BBVM разработаны специальный скрипт bbm и фортран программа testbbm.f. Программа может быть использована в качестве шаблона при разработке пользовательских SA-процедур. Ниже представлены тексты скрипта, программы и протокол их исполнения.
echo Example of BBV array interface with FORTRAN

. int aa[3]

. float bb[3]

. char cc[3][15]

. aa[0] = 0

. aa[1] = 1

. aa[2] = 2

. bb[0] = 0

. bb[1] = 1.11

. bb[2] = 2.22

. cc[0] = "0000000000aaa "

. cc[1] = "1111111111bbb "

. cc[2] = "2222222222ccc "

. varlist

testbbm

echo arrays after modification by FORTRAN program

. varlist

end


C-----------------------------------------------------------------------------------------

SUBROUTINE TESTBBM (STACK)

INTEGER STACK(*)

C --- STACK - SYSTEM VARYABLE, transmitted from main C-program

C---------------------------ARRAY BB-VARIABLES ----------------------------

INTEGER*4 AA(3)

REAL BB(3)

CHARACTER*15 CC(3)

INTEGER RC

PRINT *,'AA:', AA

PRINT *,'BB:', BB

PRINT *,'CC:', CC

C----------------------- READ ARRAYS FROM BLACK BOARD ----------------------

DO 11 i=1, 3

CALL BBVM (STACK,'R','I','aa ', I, AA(I),RC)

CALL BBVM (STACK,'R','F','bb ', I, BB(I),RC)

CALL BBVM (STACK,'R','C','cc ', I, CC(I),RC)

11 CONTINUE

PRINT *,'AA:', AA

PRINT *,'BB:', BB

PRINT *,'CC:', CC

C------------ MODIFY AND WRITE ARRAYS TO BLACK BOARD -------------

DO 22 i=1, 3

AA(I) =AA(I) +70

CALL BBVM (STACK,'W','I','aa ', I, AA(i),RC)

BB(I) =BB(I) +70.0

CALL BBVM (STACK,'W','F','bb ', I, BB(i),RC)

CC(I) (1:3) = 'NEW'

CALL BBVM (STACK,'W','C','cc ', I, CC(i),RC)

22 CONTINUE

PRINT *,'AA:', AA

PRINT *,'BB:', BB

PRINT *,'CC:', CC

END


C-------------------------------- END OF PROGRAM ---------------------------------

The protocol of the script performance is shown below

************** script bbm **************

2)echo Example of BBV interface with Fortran

7). aa[0] = 0

8). aa[1] = 1

9). aa[2] = 2

11). bb[0] = 0

12). bb[1] = 1.11

13). bb[2] = 2.22

15). cc[0] = "0000000000aaa "

16). cc[1] = "1111111111bbb "

17). cc[2] = "2222222222ccc "

19). varlist

--- LIST OF LOCAL BB VARIABLES ---

int aa[0] = 0

int aa[1] = 1

int aa[2] = 2

float bb[0] = 0.000000

float bb[1] = 1.110000

float bb[2] = 2.220000

char cc[0] = "0000000000aaa "

char cc[1] = "1111111111bbb "

char cc[2] = "2222222222ccc "

-------------- END OF LIST ------------

20)testbbm

**** testbbm ***

AA: 0 0 0

BB: 0. 0. 0.

CC:


AA: 0 1 2

BB: 0. 1.11000 2.22000

CC:0000000000aaa 1111111111bbb 2222222222ccc

AA: 70 71 72

BB: 70.0000 71.1100 72.2200

CC:NEW0000000aaa NEW1111111bbb NEW2222222ccc

21)echo arrays after modification by FORTRAN program

22). varlist

--- LIST OF LOCAL BB VARIABLES ---

int aa[0] = 70

int aa[1] = 71

int aa[2] = 72

float bb[0] = 70.000000

float bb[1] = 71.110001

float bb[2] = 72.220001

char cc[0] = "NEW0000000aaa "

char cc[1] = "NEW1111111bbb "

char cc[2] = "NEW2222222ccc "

------------------------ END OF LIST ---------------------

23) end


************** END OF SCRIPT **************


Каталог: docs -> otchety


Поделитесь с Вашими друзьями:
1   ...   9   10   11   12   13   14   15   16   17


База данных защищена авторским правом ©uverenniy.ru 2019
обратиться к администрации

    Главная страница