Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

SysLibTargetVisu

mde
2012-09-25
2014-08-01
  • mde - 2012-09-25

    Hallo,

    ich möchte während der Laufzeit des Programms dynamisch Grafiken in meiner Target-Visualisierung erzeugen.
    Dazu habe ich probiert die Funktionen der SysLibTargetVisu zu benutzen, doch bis jetzt leider ohne Erfolg.

    Meine Idee war z.B. die folgenden Funktionen zu nutzen:

    BeginPaint
    DrawRect
    EndPaint

    Hat jemand schon mal mit der Lib gearbeitet und kann mir sagen wie ich die Funktionen aufrufen muss?

    Gruß,

    mde

     
  • Esterbauer - 2014-08-01

    Hallo mde,

    funktioniert so nicht, Begin und Endpaint kapseln die Visualisierungsaufrufe von Input, Paint oder beiden (z.B. bei den Init-Routinen)
    Wenn die Targetvisu als automatische Task konfiguriert ist, erfolgen diese Aufrufe in den beiden Tasks (plus Ini-Routinen).

    Es funktioniert nur, wenn die Automatische Targetvisualisierung nicht aktiviert ist und die Funktionen in eigenen Tasks ausgeführt werden
    VISU_TASK und VISU_INPUT_TASK dürfen in der Taskkonfiguration nicht aufgeführt sein.

    Die Grundstruktur sollte dann so sein (Auszug aus Programm):

    (*Initialisieren von Variablen*)
    StopVisu('');
    BeginPaint('PLC_VISU', 1, -1, 16#00FFFFFF);
    hAckbutton50x50 := SendBitmap('ackbutton50x50.bmp');
    ....
    EndPaint('PLC_VISU', 1);
    (*Input*)
    BeginPaint('PLC_VISU', 4, -1, 16#00FFFFFF);
    IF gMainButtons.Pressed.Edit THEN
       IF IsClickedRect(312, 372, 493, 413, TRUE, TRUE, 0, TRUE) = 1 THEN
          gMachineParams.SafetyBridge.ParValue[PLEV_Edit].Value := NOT gMachineParams.SafetyBridge.ParValue[PLEV_Edit].Value;
       END_IF
       IF IsClosedEditC('gMachineParams.LevelWeightFactor.ParValue[PLEV_Edit].Value') THEN
          RTGraphic_String := ReturnEnteredValue('gMachineParams.LevelWeightFactor.ParValue[PLEV_Edit].Value');
          gMachineParams.LevelWeightFactor.ParValue[PLEV_Edit].Value := STRING_TO_REAL(RTGraphic_String);
       END_IF
       IF IsClickedEditC(72, 132, 253, 173, TRUE, TRUE, TRUE)  THEN
          DrawEditC(72, 132, 253, 173, REAL_TO_STRING(gMachineParams.LevelWeightFactor.ParValue[PLEV_Edit].Value), 'gMachineParams.LevelWeightFactor.ParValue[PLEV_Edit].Value', 6, 2, '', '', '');
       END_IF
    ....
    EndPaint('PLC_VISU', 4);
    (*Paint*)
    BeginPaint('PLC_VISU', 2, -1, 16#00FFFFFF);
    SetFont('Arial', 12, 2, 0);
    SetFill(1, 16#00E8E8E8);
    SetLine(1, 5, 16#000);
    RTGraphic_Text := Printf('%<Params>', UINT_TO_DWORD(PAR_LevelWeightFactor), 40);
    DrawRect(82, 102, 253, 133, RTGraphic_Text, DF_BOTTOM OR DF_LEFT, 0, TRUE);
    SetFill(0, SEL(gMachineParams.LevelWeightFactor.Flags.ValueChanged, SEL(NOT gMainButtons.Pressed.Edit, COL_White, COL_Disabled), COL_ValueChanged));
    DrawRect(76, 134, 248, 168, '', DF_VCENTER OR DF_HCENTER, 1, TRUE);
    SetLine(1, 5, 16#000);
    RTGraphic_Text := Printf('%<Params>', UINT_TO_DWORD(PAR_SafetyBridge), 40);
    DrawRect(345, 374, 488, 408, RTGraphic_Text, DF_VCENTER OR DF_HCENTER, 1, TRUE);
    SetFill(0, SEL(gMachineParams.SafetyBridge.Flags.ValueChanged, SEL(NOT gMainButtons.Pressed.Edit, COL_White, COL_Disabled), COL_ValueChanged));
    DrawRect(314, 379, 339, 404, '', DF_VCENTER OR DF_HCENTER, 0, TRUE);
    SetFill(1, 16#00FFFFFF);
    SetLine(1, 0, 16#000);
    DrawBitmap(SEL(gMachineParams.SafetyBridge.ParValue[PLEV_Edit].Value, hCheckbox180x40, hCheckbox180x40p), 313, 373, 492, 412, 2, 16#80FFFFFF, TRUE);
    EndPaint('PLC_VISU', 2);
    

    Die Sonderregelungen, die bei der TargetVisu sonst angewendet werden (z.B Variablenzugriff) gelten dann nicht mehr, hier ist nach der Standardkonvention zu porgrammieren (global oder IN/OUT Richtungsgenau zuweisen)

    mit freundlichen Grüßen
    C. Esterbauer

     

Log in to post a comment.