Tag Archives: визуализация в CoDeSys

Неявные переменные визуализации CodeSys

В программе доступны следующие системные переменные, управляющие визуализацией:

CurrentVisu String[40] Имя текущей визуализации. Если имя изменяется, то проводится изменение визуализации. Строку имени визуализации следует всегда вводить прописными буквами.

В зависимости от целевой системы использование этой переменной может активироваться / деактивироваться в настройках целевых систем.

CurrentCaller String[40] Содержит имя предыдущей визуализации (для ZOOMTOCALLER). Устанавивается и изменяется только в целевой визуализации.

CurrentLanguage String[40] Текущий выбранный язык, заданный в языковом файле. Его нужно указывать прописными буквами. Устанавивается и изменяется только в целевой визуализации.

CurrentUser-Level INT Группа пользователя 0.. 7. Значение должно изменяться только в соответствующем диалоге CoDeSys.

CurrentPasswords[0 .. 7] ARRAY [0..7] OF STRING[20] Пароли, заданные в CoDeSys ‘User Group Passwords…’ . Значение должно изменяться только в соответствующем диалоге CoDeSys.

Неявные переменные CurrentLanguage, CurrentUserLevel и CurrentPasswords[0..7] могут быть объявлены

реманентными для использования их в целевой визуализации. Для этого их необходимо объявить явно в списке глобальных переменных. Они должны быть объявлены в самом верхнем списке папки ‘Global Variables’ на вкладке Resources. При размещении объявлений в ином списке, компилятор даст сообщение об ошибке.

Переменные CurrentUserLevel, CurrentPasswords[…] нужно объявлять в одном разделе (normal, RETAIN, PERSISTENT…)! Если они объявлены реманентными, то нужно объявить дополнительно глобальную переменную «VisuDoExecuteUserlevelInit» типа BOOL RETAIN, инициализировав ее TRUE («VisuDoExecuteUserlevelInit : BOOL := TRUE;»).

Мой блог находят по следующим фразам

Пример Dll для ActiveX Control

Ниже приведен исходный текст примера Dll, использующийся для вызова методов ActiveX элемента в визуализации CoDeSys.

В данном примере dll будет вызывать методы GoBack или GoForward, только если элемент поддерживает интерфейс IWebBrowser.

Метод выбирается параметром pszId.

#include «stdafx.h»

#include <unknwn.h>

#include <exdisp.h>

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,

LPVOID lpReserved)

{

return TRUE;

}

extern «C» __declspec (dllexport) void ExecuteActiveXCall(IUnknown* pUnk,

char* pszId, char* pszParam, char* pszReturnBuffer, int nReturnBufferSize,

DWORD* pdwReturnFlag)

{

if (strcmp(pszId, «IWebBrowser|GoBack») == 0)

{

IUnknown* pNewUnk;

IWebBrowser* pwb;

pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk);

pwb = (IWebBrowser*) pNewUnk;

if (pwb)

{

pwb->GoBack();

pwb->Release();

}

}

else if (strcmp(pszId, «IWebBrowser|GoForward») == 0)

{

IUnknown* pNewUnk;

IWebBrowser* pwb;

pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk);

pwb = (IWebBrowser*) pNewUnk;

if (pwb)

{

pwb->GoForward();

pwb->Release();

}

Мой блог находят по следующим фразам

Система пожарной сигнализации здания

В здании две одинаковые комнаты.

В каждой комнате установлено три пожарных датчика, кнопка ручного включения сигнализации и кнопка ручного отключения сигнализации. Для каждой комнаты предусмотрена сигнальная лампа. Сигнализация пожара является общей для обеих комнат.

Если в комнате срабатывает хотя бы один из датчиков, то загорается сигнальная лампа для соответствующей комнаты. Лампа гаснет, если все датчики в комнате отключены.

Если в комнате срабатывает любые два из трех датчиков, то включается пожарная сигнализация. Сигнализация работает до тех пор, пока ее не отключат соответствующей кнопкой.

Сигнализация может быть включена кнопкой включения вне зависимости от состояния датчиков.

Рисунок 1 Схема задачи

Рисунок 1 Схема задачи

Рисунок 2 Добавление функции или функционального блока

Рисунок 2 Добавление функции или функционального блока

Рисунок 3 Добавление функции срабатывания 2-х датчиков из 3-х

Рисунок 3 Добавление функции срабатывания 2-х датчиков из 3-х

Рисунок 4 Добавление функционального блока обработки сигналов для комнаты

Рисунок 4 Добавление функционального блока обработки сигналов для комнаты

Подпрограммы.

 

Функция выбора 2 из 3 (язык ST)

Назначение: функция имеет сигнал типа логической 1 на выходе при наличии на входе не менее 2 сигналов типа логической 1.

Область переменных:

FUNCTION log2_3 :BOOL

VAR_INPUT

in1, in2,in3: BOOL;(*входы функции*)

END_VAR

VAR

END_VAR

Программа:

IF (in1 AND in2)OR((in1 AND in3))OR(in2 AND in3) THEN log2_3:=1;

ELSE log2_3:=0;

END_IF;

Функциональный блок обработки сигналов для 1 комнаты.

 

Область переменных:

FUNCTION_BLOCK room

VAR_INPUT

dat1,dat2,dat3:BOOL;(*сигналы с датчиков пожарной безопасности в комнате*)

knop_trevog, sbros_trevog:BOOL;(*внешние  кнопки включения и сброса тревоги*)

logika23:BOOL;(*сигнал о срабатывании 2 пожарных датчиков*)

END_VAR

VAR_OUTPUT

sign_lamp, sign_trevog:BOOL;(*сигнальная лампа комнаты и сигнал тревоги*)

END_VAR

VAR

END_VAR

Рисунок 5 Функциональный блок обработки сигналов для комнаты на языке LD

Рисунок 5 Функциональный блок обработки сигналов для комнаты на языке LD

Основная программа:

 

Область переменных:

PROGRAM PLC_PRG

VAR

dat11,dat12,dat13,dat21,dat22,dat23:BOOL;(*датчики пожарной сигнализации в комнатах*)

sign1,sign2:BOOL;(*сигнальные лампы комнат*)

alarm:BOOL;(*сигнал тревоги*)

trevog1, sbros1,trevog2, sbros2:BOOL;(*внешние кнопки тревоги и сброса тревоги*)

room1: room;               (*блок пожарной сигнализации 1 комнаты*)

room2: room;               (*блок пожарной сигнализации 2 комнаты*)

END_VAR

Рисунок 6 Основная программа на языке CFC

Рисунок 6 Основная программа на языке CFC

Рисунок 7 Пример организации визуализации задачи

Рисунок 7 Пример организации визуализации задачи

 

Мой блог находят по следующим фразам