O comportamento da válvula programado na seção anterior ... é ilógico. No manipulador para clicar no botão "Abrir" ou "Fechar", definimos diretamente o valor do elemento denominado Posição. Dado isso no próprio DPT, já temos os comandos "Abrir" e "Fechar".
, - , , , . workshop , .
«» «».
main(mapping event)
{
dpSet("System1:Flap1.Commands.Open", 1, "System1:Flap1.Commands.Close", 0);
}
, DPE, , , . «» «», « » (, , , ).
«Close»
, Para
, , . open close .
gedi Scripts, Add New CTRL Script
, Model
. . - WinCC OA, dpConnect, . .
dpConnect . , , .
callback .
WinCC OA. «» dpGet , , .
, dpConnect . — callback- ( OnOpen_CB), — , . , , - main Model :
main()
{
dpConnect("OnOpen_CB", "System1:Flap1.Commands.Open");
}
callback-. — ( string) «» ( «» ). .
void OnOpen_CB(string dp1, bool bNewValue)
{
;
}
, . «» «», , 90. «», — 0.
void OnOpen_CB(string dp1, bool bNewValue)
{
if (bNewValue) {
dpSet("System1:Flap1.Inputs.Position", 90);
} else {
dpSet("System1:Flap1.Inputs.Position", 0);
}
}
- . «» Control Manager. , (Control), . Control. . , , ?
WinCC OA Append new manager, Control. (Start mode) (manual), . . 2. 2? 1 . . . , ui 1 ctrl 1, ui ( ctrl) . «-num 2». , . :
Manager Start ( ). , 2.
.
, Control Manager (, main) . main() callback , , dpConnect ( ). , , control- . - .
O próprio gerenciador de controle cria seu próprio processo separado na inicialização. Sua função principal é executada em uma thread separada (thread). A função de retorno de chamada (em nosso caso OnOpen_CB) também é executada em uma thread separada. Após a execução, a função principal para de funcionar, mas o retorno de chamada continua na memória do PC (em seu próprio thread) e é chamado quando a variável "assinada" muda.