Tutorial de WinCC OA. Parte 2. Introducción al editor gráfico gedi y la función dpConnect

La última vez terminamos creando un tipo de punto de datos (DPT Flap) y tres instancias de puntos de datos (DPs Flap1, Flap2, Flap3). Es hora de pasar al componente visual de la interfaz del operador. Abra el módulo gedi. En gedi, vemos el nombre de nuestro proyecto en el árbol y sus componentes. Ahora estamos interesados ​​en los "paneles", así que los ampliamos.

, . , «Add new panel».

— Flap.pnl, .

«» — , : pnl xml. Xml ( , WinCC OA ), . gedi, . «save as» ( — , ). Flap.pnl:

, ,

gedi , .

, , . , «Background color».

.

, , RGB. , , . , RGB, More, () , . blue.

Elegir el color azul
blue
"Tubería con color seleccionado"
" "

- «»

-. ( — ).

(, ). . .. « » (reference point). ( , ). «Rotation» 90, .

, ( , ). Rotation . reference point , .

Rotation. «», «».

Save Save and run, .

— DPE Position DP Flap. «», ( ) Initialize «Open property wizard» .

Rotate object

DPE Flap1.Inputs.Position, «» «», Next, «Finish»

Save and run . DPE Flap1.Inputs.Position 11, .

para Flap1.Inputs.Position._original 90, «»

«Initialize» «». Open script editor:

// SimpleCtrlScriptStart {valid}
main()
{
  EP_setRotation();
}

void EP_setRotation()
{
  dyn_errClass err;

  if( !dpExists( "System1:Flap1.Inputs.Position:_online.._value") )
  {
    setValue("", "color", "_dpdoesnotexist");
    return;
  }

  dpConnect("EP_setRotationCB",
            "System1:Flap1.Inputs.Position:_online.._value");
  err = getLastError();
  if (dynlen(err) > 0)
    setValue("", "color", "_dpdoesnotexist");

}


void EP_setRotationCB(string dp1, int iNewValue)
{
  float MIN_VALUE = 0;
  float MAX_VALUE = 90;
  float MIN_ROTATION = 0;
  float MAX_ROTATION = 90;

  float fRotation;
  fRotation = ( 1.0 * (MAX_ROTATION - MIN_ROTATION) / (MAX_VALUE - MIN_VALUE)) * 
              (iNewValue - MIN_VALUE) + MIN_ROTATION;
  if (fRotation > MAX_ROTATION) fRotation = MAX_ROTATION;
  else if (fRotation < MIN_ROTATION) fRotation = MIN_ROTATION;

  setValue("", "rotation", fRotation);
}

// SimpleCtrlScript {EP_setRotation}
// DP {System1:Flap1.Inputs.Position}
// DPConfig {:_online.._value}
// DPType {int}
// PVSSRange {0}
// Min {0}
// Max {90}
// MinRotation {0}
// MaxRotation {90}
// SimpleCtrlScriptEnd {EP_setRotation}

, — . , Wizard. , WinCC OA, — , «», . , C. WinCC OA Control.

. , main(), « » , .

main()
{
  EP_setRotation();
}

main() — EP_SetRotation(). .

void EP_setRotation()
{
  dyn_errClass err;

  if( !dpExists( "System1:Flap1.Inputs.Position:_online.._value") )
  {
    setValue("", "color", "_dpdoesnotexist");
    return;
  }

  dpConnect("EP_setRotationCB",
            "System1:Flap1.Inputs.Position:_online.._value");
  err = getLastError();
  if (dynlen(err) > 0)
    setValue("", "color", "_dpdoesnotexist");

}

, . (, DPE) , «». dpConnect. , …

dpConnect!!!

. dpConnect «» — WinCC OA. , . , , , , , . WinCC OA, - . , !

dpConnect ?

dpConnect("EP_setRotationCB", "System1:Flap1.Inputs.Position:_online.._value");

-, Callback- EP_setRotationCB ( ). -, - EP_setRotationCB System1:Flap1.Inputs.Position:_online.._value, , . , , (EV). , , DPE Position Flap1 . , , .

MQTT, S7-1200. . . — . . UI ( dpConnect). , callback-. , , . , , , .. (), dpConnect .

, . main EP_SetRotation. main . EP_SetRotation, , DPE , . — - ? — dpConnect () , , -. , , , . , WinCC OA — , . , , , .

callback-

void EP_setRotationCB(string dp1, int iNewValue)
{
  float MIN_VALUE = 0;
  float MAX_VALUE = 90;
  float MIN_ROTATION = 0;
  float MAX_ROTATION = 90;

  float fRotation;
  fRotation = ( 1.0 * (MAX_ROTATION - MIN_ROTATION) / (MAX_VALUE - MIN_VALUE)) * 
              (iNewValue - MIN_VALUE) + MIN_ROTATION;
  if (fRotation > MAX_ROTATION) fRotation = MAX_ROTATION;
  else if (fRotation < MIN_ROTATION) fRotation = MIN_ROTATION;

  setValue("", "rotation", fRotation);
}

— ( ), . — . DPE, .

setValue. :

( ) — , . ( );

(rotation) — , , , … «» «» ( WinCC );

(fRotation) — .

- , Shape, (GetShape) . .

, , , , .

— . WinCC OA, . Push Button «Button label»

Open. Clicked Script Editor. dpSet, , :

— DPE, DPE. Tools→Datapoint Selector .

Flap1.Inputs.Position. , , . «» — 90 ( ). . . , — . ? . , , , , dpExists.

Close. — DPE Position 90, 0. Save and run .

Haga clic en "Cerrar"
""
Haga clic en "Abrir"
""

dpSet. , , .

dpSet("System1:Flap1.Inputs.Position", 90);

… ( )

System1:Flap1.Inputs.Position:= 90;

. ui. DPE EV. ui EV TCP/IP. dpSet — , ui EV. ( ) — . ? , ? (", " () ). ? ? ? ui EV , . . . . , , WinCC OA , .

¿Qué es lo correcto por hacer? Es correcto enviar múltiples asignaciones con una sola llamada a la función dpSet. Por ejemplo, en lugar de tres llamadas:

dpSet ("Sistema1: Flap 1 .Inputs.Position", 90);

dpSet ("Sistema1: Flap 2 .Inputs.Position", 90);

dpSet ("Sistema1: Flap 3 .Inputs.Position", 90);

hacer una llamada

dpSet ("Sistema1: Flap 1 .Inputs.Position", 90, "Sistema1: Flap 2 .Inputs.Position", 90, "Sistema1: Flap 3 .Inputs.Position", 90);




All Articles