Вопросы и ответы



Записей не найдено.

 
 

Вопросы и ответы

КРУГОЛ


Можно ли в программе контроллера и в программе станции оператора использовать одинаковые номера внутренних переменных, например:
в программе контроллера пв35=6.00
в программе станции оператора пв35=8.00
Разные ли это переменные? Не приведет ли это к чередованию записи значений в них?

Промежуточные переменные типа пл,пв,пц, а также таймеры тс,тм,тч в контроллере и станции оператора разные. Их использование в контроллере и на Станции оператора с одинаковой индексацией не приведет к чередованию записи в них.

 

Почему транслятор Кругола под WinNT для моей программы создает только файлы *.out и *.map, а где *.lab?

Файлы *.lab создаются только в случае, когда в программе используются функции (sin(x) и т.п.), в остальных случаях о не создается и его наличие для СО не требуется.

 

Можно ли и в программе станции оператора присваивать значения не физическим контроллерным переменным?

В программе Станции оператора (СО) можно изменять значения эти переменных, а также их атрибутов. Список атрибутов доступных на "чтение" и "запись" приведен в инструкции на технологический язык "Кругол".
Однако, существуют некоторые ограничения и особенности. Вообще осуществить запись в какой либо атрибут "виртуальной", а в некоторых случаях и физической контроллерной переменной, можно только используя в программе СО функции посВА(пц1), посАВ(пц1),посВД(пц1), посДВ(пц1), посРВ(пц1).
Для каждого типа переменных существует своя функция. Функция осуществляет посылку всего "паспорта" соответствующей переменной. В параметре функции передается номер переменной в базе данных СО - целая величина. Обращаем Ваше внимание на то, что в протоколе обмена СО - контроллер эта функция имеет наивысший приоритет. Таким образом, если вызывать эту функцию в каждом проходе программы, то обмен с контроллером может быть прекращен (система будет заниматься только посылкой паспортов). Примеры реализации задач изменения значений контроллерных переменных всех типов с оптимальным использованием вышеописанных функций приведены в процедуре PRIMER:

Процедура PRIMER
НачалоПроцедура PRIMER

Начало

: Пример изменения значения различных атрибутов и
: текущих значений контроллерных переменных

:********************************************************************
: Пример для переменной типа "РУЧНОЙ ВВОД"
:********************************************************************

Если рв91 = 1 : Управление тестовым примером из СО РВ
{
рв91 = 0
пл7 = 0

РВ7 = 4.55 : Изменяем текущее значение переменной
РВ7.а6 = 9.5 : или один из ее атрибутов (в данном случае "максимум")
: чтобы изменения попали в контроллер
Если пл7 = 0
{
посРВ(7) : посылаем паспорт переменной в контроллер
пл7 = 1 : оператор условия ЕСЛИ позволяет выполнить эту операцию
}} : единожды. При следующем изменении атрибутов РВ
: вниз по тексту необходимо "обнулить" флаг пл7
: и паспорт уйдет вновь в контроллер

:********************************************************************
: Пример для переменной типа "ВХОДНАЯ ДИСКРЕТНАЯ" и
: "ДИСКРЕТНАЯ ВЫХОДНАЯ"
:********************************************************************

Если рв92 = 1 : Управление тестовым примером из СО ВД,ДВ
{
рв92 = 0
пл6 = 0

вд2 = 1 : Изменяем текущее значение переменных
дв521 = 1 : они должны быть "виртуальными"

Если пл6 = 0
{
посВД(2) : посылаем паспорта переменных в контроллер
посДВ(521) : "2" и "521" номер пеменной в БД СО, а не УСО
пл6 = 1 : аналогично взводим флаг запрещающий посылку

}}

:********************************************************************
: Пример для переменной типа "ВХОДНАЯ АНАЛОГОВАЯ"
:********************************************************************

: Пример изменения значения различных атрибутов и
: текущих значений контроллерных переменных

:********************************************************************
: Пример для переменной типа "РУЧНОЙ ВВОД"
:********************************************************************

Если рв91 = 1 : Управление тестовым примером из СО РВ
{
рв91 = 0
пл7 = 0

РВ7 = 4.55 : Изменяем текущее значение переменной
РВ7.а6 = 9.5 : или один из ее атрибутов (в данном случае "максимум")
: чтобы изменения попали в контроллер
Если пл7 = 0
{
посРВ(7) : посылаем паспорт переменной в контроллер
пл7 = 1 : оператор условия ЕСЛИ позволяет выполнить эту операцию
}} : единожды. При следующем изменении атрибутов РВ
: вниз по тексту необходимо "обнулить" флаг пл7
: и паспорт уйдет вновь в контроллер

:********************************************************************
: Пример для переменной типа "ВХОДНАЯ ДИСКРЕТНАЯ" и
: "ДИСКРЕТНАЯ ВЫХОДНАЯ"
:********************************************************************

Если рв92 = 1 : Управление тестовым примером из СО ВД,ДВ
{
рв92 = 0
пл6 = 0

вд2 = 1 : Изменяем текущее значение переменных
дв521 = 1 : они должны быть "виртуальными"

Если пл6 = 0
{
посВД(2) : посылаем паспорта переменных в контроллер
посДВ(521) : "2" и "521" номер пеменной в БД СО, а не УСО
пл6 = 1 : аналогично взводим флаг запрещающий посылку

}}

:********************************************************************
: Пример для переменной типа "ВХОДНАЯ АНАЛОГОВАЯ"
:********************************************************************

: В данной версии мы можем изменять все доступные атрибуты
: напрямую кроме текущего значения переменной (ТЗ)

Если рв93 = 1 : Управление тестовым примером из СО ВД,ДВ
{
рв93 = 0
пл5 = 0

ва10.a12 = 50 : Например изменяем конец шкалы

Если пл5 = 0
{
посВА(10) : Аналогично посылаем паспорт
пл5 = 1
}}

: Если нам все же необходимо изменить ТЗ "виртуальной" ВА
: то можно использовать дополнительную РВ
: а в программе контроллера присвоить соответствующей ВА значение РВ
: например ВА10 = РВ7. Возможно в следующих версиях
: это неудобства не будет
:********************************************************************

:********************************************************************
: Пример для переменной типа "АНАЛОГОВАЯ ВЫХОДНАЯ"
:********************************************************************

: В данной версии мы не можем изменять ни один атрибут АВ на СО
: напрямую. Только через промежуточную РВ аналогично ТЗ ВА
: Например РВ7 - нужное пересчитанное задание АВ,
: тогда посылаем ее в контроллер, а там пишем ав1.a21 = рв7

Выход
Конец