FactoryLink 7.5 Application Editor: Bitmaps, Buttons, Visibility

David Krause12 min read
HMI / SCADASiemensTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview of FactoryLink 7.5 Application Editor

FactoryLink 7.5 is a SCADA/HMI runtime from the Siemens Tecnomatix product line. The Application Editor (AppEd) is the offline drawing tool used to assemble operator screens that the supervisory runtime resolves when the project is loaded. Unlike Client Builder, which configures client topology and channel routing, Application Editor works directly on the .G drawing files inside the project. The editor does not embed raster images inline; instead it consumes a same-stem .BMP file in the same project directory and uses it as both the design-time and runtime background.

FactoryLink 7.5 editor components
Component Purpose File extensions handled
Application Editor Build operator graphics, animations, scripts .G, .SYM, .BMP, embedded .VB
Client Builder Configure client topology and channel bindings .CLB, .INI
Symbol Library (SYMBOLS.G) Reusable named objects for symbol animation SYMBOLS.G
PowerVB Engine VBA-compatible scripting for runtime events .VB (PowerVB blocks embedded in .G)
Database Manager Tag and point configuration .MDB / .FAP index

Application Directory Layout and File Conventions

The Application Editor reads drawings from the project root denoted by the {FLAPP} token. {FLAPP} resolves to the directory that contains the project .FAP file. All static graphic resources consumed by Application Editor must live in dedicated subfolders under {FLAPP}\USER\DRW so that the supervisory runtime can resolve them at load time.

{FLAPP}
+-- application.FAP
+-- USER
    +-- DRW
        +-- MENU.G
        +-- MENU.BMP
        +-- AREA1.G
        +-- AREA1.BMP
        +-- SYMBOLS.G
        +-- SYMBOLS.BMP
File-stem coupling rule: A bitmap becomes the background of drawing name.G only when a sibling file name.BMP exists in {FLAPP}\USER\DRW. Filenames are case-insensitive on Windows NT/2000 hosts but case-sensitive on mixed Samba / NFS mounts. Stick to uppercase 8.3-safe stems for legacy paths to avoid load-order issues on Windows NT 4 / Windows 2000 runtime hosts.

Inserting a Bitmap Background into a Drawing

Application Editor does not provide an Insert → Image menu. The bitmap is bound at runtime by name match. To attach a company logo or a custom faceplate background to drawing MENU.G, the file MENU.BMP must be present in the same folder.

  1. Create or export the desired graphic as an uncompressed Windows BMP (8-bit indexed or 24-bit; BI_RLE8 compressed BMPs are not rendered reliably by FactoryLink 7.5 and should be avoided).
  2. Rename the BMP so its stem matches the target drawing exactly: MENU.GMENU.BMP, AREA1.GAREA1.BMP.
  3. Copy the BMP into {FLAPP}\USER\DRW using Windows Explorer, a deployment script, or the project publisher. Do not place the BMP in the runtime BIN directory; the editor and the runtime both resolve it from USER\DRW.
  4. Open the drawing in Application Editor. The bitmap appears as the design-time background. Reopen the project from the supervisory if a stale copy was cached.
  5. At runtime, the supervisory service paints the bitmap before any vector primitives, so vector objects drawn on top overprint the image in z-order. Avoid placing transparent vector fills beneath visually critical image regions if the BMP carries gradients.
BMP background validation checklist
Item Required value Notes
Color depth 8 bpp (256 color) or 24 bpp 32 bpp alpha is not decoded in 7.5
Compression BI_RGB (none) Avoid BI_RLE8; risk of blank bitmap
Maximum size 2048 x 2048 px recommended Tested up to 4096 with reduced paint rate
File stem Identical to drawing stem, extension .BMP Case-insensitive on Windows
Location {FLAPP}\USER\DRW Same folder as the .G file
If the bitmap does not appear after deployment, verify that the project has been reloaded by the supervisory. FactoryLink 7.5 caches the directory listing at supervisor start. Touch the .FAP file or restart the flMain service to force a re-scan of the DRW folder.

Controlling Object Visibility with Symbol Animation

Symbol Animation is the built-in mechanism to swap one or more predefined symbols based on a tag value. A symbol is a named object drawn inside the project-wide SYMBOLS.G file. The named symbol is then referenced by the Symbol Animation tool inside any drawing.

  1. Open {FLAPP}\USER\DRW\SYMBOLS.G in Application Editor.
  2. Draw two (or more) variants, e.g., STATE_HIDDEN and STATE_VISIBLE. The hidden variant is typically placed off-canvas at coordinates (-32000, -32000) so the symbol appears to vanish when the animation selects it.
  3. Save SYMBOLS.G and reopen the target drawing (e.g., MENU.G).
  4. Select the host object, choose Insert → Animation → Symbol.
  5. Bind the animation to the controlling tag (e.g., PUMP1_RUN) and set the symbol mapping:
    • Tag value 0 → STATE_HIDDEN
    • Tag value 1 → STATE_VISIBLE
  6. Set the refresh rate. Recommended: 250 ms for visibility, 100 ms for level meters, 500 ms for slow alarms.

Symbol Animation is purely declarative, requires no script, and survives HMI client rebuilds cleanly. Use it whenever the on/off visibility logic is static and the number of states is small (8 or fewer). For composite conditions or computed visibility, fall back to PowerVB.

Controlling Object Visibility with PowerVB Script

When visibility depends on compound expressions (multiple tags, computed thresholds, or alarm states), Symbol Animation becomes cumbersome. PowerVB scripts attached to OnShow or tag-change events give full control.

The classic FactoryLink pattern is to relocate the object off-screen rather than toggle a visibility property. The following PowerVB snippet, attached to the OnShow event of drawing AREA1.G, hides object VALVE_V1 when tag ZONE1_ENABLE is 0 and shows it when the tag is 1.

' PowerVB - AREA1.G - OnShow event
If ZONE1_ENABLE = 0 Then
    VALVE_V1.X = -32000
    VALVE_V1.Y = -32000
Else
    VALVE_V1.X = 220
    VALVE_V1.Y = 140
End If

For dynamic tag-driven visibility without OnShow, attach the same logic to a tag-change subscription on ZONE1_ENABLE:

' PowerVB - TagChange on ZONE1_ENABLE
Sub OnChange_ZONE1_ENABLE(NewVal)
    If NewVal = 0 Then
        VALVE_V1.Visible = 0   ' 0 = hidden, 1 = visible in 7.5
        VALVE_V1.X = -32000
        VALVE_V1.Y = -32000
    Else
        VALVE_V1.Visible = 1
        VALVE_V1.X = 220
        VALVE_V1.Y = 140
    End If
End Sub
Why move off-screen rather than only flip Visible? FactoryLink 7.5 on some Windows GDI configurations still redraws objects marked Visible = 0 because the back buffer is not cleared. Moving the object to (-32000, -32000) guarantees it is clipped. This is the documented pattern for FactoryLink tooltips and remains the field-tested approach for valve and motor visibility.

Building a "Go To" Navigation Button

Application Editor exposes a button animation that fires an action on mouse click. The simplest action type is DRW, which loads another drawing in place of the current one.

  1. In Application Editor, draw a rectangle on the source drawing. The rectangle becomes the hot region of the button.
  2. Select the rectangle and click the OK-button icon in the toolbox (the icon resembles a check mark). This invokes the Button Animation dialog.
  3. Set Action Type = DRW.
  4. In the Value field, type the target drawing stem without the .G extension, e.g., AREA1 for AREA1.G.
  5. Add a Text object on top of the rectangle to label the button (e.g., Open Area 1).
  6. For an optional security gate, change Action Type to DRW_S and supply a numeric level code, or wrap the call in a PowerVB OnClick handler that checks operator level before invoking OpenDrawing "AREA1".
Button Animation action types
Action Type Effect When to use
DRW Loads target .G drawing unconditionally Free navigation between screens
DRW_S Loads drawing only if operator security level ≥ Value Restricted engineering screens
CMD Sends a command string to a configured channel Direct PLC writes (start/stop)
VB Invokes a PowerVB subroutine Conditional or multi-step logic
DDE Sends a DDE execute to a server application Legacy bridges to non-PLC software

Implementing a Toggle Tag Button with PowerVB

FactoryLink 7.5 ships without a built-in toggle animation. The runtime pattern is a small PowerVB handler bound to the button's OnClick event.

' PowerVB - Toggle button OnClick handler
Sub OnClick_TOGGLE_PUMP()
    If PUMP1_CMD = 0 Then
        PUMP1_CMD = 1
    Else
        PUMP1_CMD = 0
    End If
End Sub

For auditable toggle behavior, route the new value through the command channel rather than the live value tag so the action shows up in the audit log:

' PowerVB - Toggle through command channel
Sub OnClick_TOGGLE_PUMP()
    Dim newState As Integer
    newState = IIf(PUMP1_CMD = 0, 1, 0)

    ' Write through channel; preserves audit trail
    Channel1.Write "PUMP1_CMD", newState
End Sub
  1. Draw a rectangle on the operator screen (e.g., MENU.G) and apply the OK-button animation. Set Action Type to VB and Value to OnClick_TOGGLE_PUMP.
  2. Save the drawing and reload the supervisory to register the new event handler.
  3. Verify by clicking at runtime. Tag PUMP1_CMD should flip 0→1→0→1 on consecutive clicks.
  4. For multi-tag toggles (start permissive + run command), extend the handler with a guard: If PERMISSIVE_OK = 1 Then ... Else MsgBox "Permissive not satisfied".

PowerVB Script Reference Snippets

The following snippets capture the canonical FactoryLink 7.5 patterns. Use them as a quick-reference when porting screens or troubleshooting field reports.

PowerVB snippet library
Intent Code
Read tag value v = MOTOR_SPEED
Write tag value MOTOR_SPEED = 1500
Conditional visibility If TAG > 0 Then OBJ.Visible = 1 Else OBJ.Visible = 0
Off-screen hide OBJ.X = -32000 : OBJ.Y = -32000
Restore position OBJ.X = 220 : OBJ.Y = 140
Open drawing OpenDrawing "AREA1"
Confirm prompt If MsgBox("Confirm?", 4) = 6 Then TAG = 1
Audit log LogMessage "Operator toggled PUMP1"
Tag-change subscribe Sub OnChange_TAGNAME(NewVal) ... End Sub
Toggle (no audit) TAG = IIf(TAG = 0, 1, 0)
PowerVB in FactoryLink 7.5 is a VBA-compatible subset. It does not expose Dim types beyond Integer, Long, Single, Double, and String. Class modules are not supported. For complex projects, decompose logic into multiple subroutines rather than relying on object-oriented features.

Common Errors and Troubleshooting Matrix

FactoryLink 7.5 Application Editor fault matrix
Symptom Likely root cause Resolution
Bitmap does not show in editor or runtime Filename mismatch with .G drawing Rename BMP to match drawing stem; redeploy to {FLAPP}\USER\DRW
Bitmap shows in editor but not at runtime BI_RLE8 compressed BMP Re-save with BI_RGB (no compression)
Object remains visible after Visible=0 Back-buffer not cleared on legacy GDI Move object to (-32000, -32000) in addition to Visible flag
Go To button does nothing Action Type set to DRW but Value includes .G extension Strip the .G; enter target drawing stem only
Go To button opens wrong screen Stem collision with another project Rename drawing to a unique stem; verify against entire DRW folder
Toggle button flips once then sticks Handler bound to wrong tag or stale read cache Reference the live tag, not a snapshot; reload supervisor
Symbol Animation always shows first state SYMBOLS.G not deployed alongside drawing Copy SYMBOLS.G to {FLAPP}\USER\DRW on every client
PowerVB handler never fires Handler name does not match Button Animation Value Verify exact case match between VB subroutine name and Value field
Drawing opens blank at runtime Corrupt .FAP project or wrong project root Validate project with Application Manager; republish
Slow paint on large BMP Bitmap larger than 2048x2048 on low-end client Tile the background or reduce to 1024x768
Toggle fires twice on single click Handler bound to both MouseDown and MouseUp Bind to a single event; use MouseUp only

Migration Considerations to WinCC

Siemens positions WinCC as the strategic successor to FactoryLink, and the Tecnomatix integration path eventually folded the FactoryLink runtime into the WinCC ecosystem. Customers running FactoryLink 7.5 should plan a staged migration when:

  • Windows XP / Server 2003 host support ends (FactoryLink 7.5 was certified only through those operating systems).
  • Cyber-hardening mandates require signed binaries and current TLS stacks; FactoryLink 7.5 ships with DES-based OPC Classic tunnels and a 32-bit channel architecture.
  • Operator training moves to WinCC Comfort / Advanced panels, which do not run the .G drawing format.
  • PLC fleets migrate to S7-1500 / ET 200SP, which expect TIA Portal engineering flows.

Before migration, capture an inventory of:

  1. Every .G drawing and its matching .BMP background (the file-stem coupling is the first casualty of automated converters).
  2. Every PowerVB handler, its triggering event, and the tag namespace it touches.
  3. Custom channel configurations (DDE, OPC Classic, SuiteLink) and their server names.
  4. Operator security levels, group memberships, and override passwords.
  5. Alarm priorities, audible annunciator mappings, and any external pager integrations.

For migration planning, consult the Siemens SCADA and HMI software portfolio and the official Siemens Industry Online Support portal. FactoryLink-specific migration notes are filed under the legacy SCADA archive.

Verification and Acceptance Tests

After implementing the techniques above, run the following acceptance checks before handing the screen back to operations.

  1. Background test: Open the drawing at runtime. Confirm the bitmap fills the canvas, and that no white border or stretched distortion is visible at the configured client resolution (typically 1024 x 768 or 1280 x 1024 for FactoryLink 7.5 clients).
  2. Visibility test: Force the controlling tag to 0 in the Database Manager, then to 1. Confirm the object disappears and reappears within one refresh cycle (typically ≤ 500 ms).
  3. Navigation test: Click the Go To button. Confirm the new drawing loads in ≤ 1 s on the target client hardware.
  4. Toggle test: Click the toggle button ten times. Confirm the tag values alternate 0, 1, 0, 1 ... and that no double-fire occurs on hold-down (mousedown debounce).
  5. Symbol Animation test: Drive the tag through every defined state value. Confirm each symbol variant displays correctly and that no off-screen artifacts leak into the visible canvas.
  6. Script audit: Open the PowerVB IDE, export the project, and diff against the source-controlled template to catch accidental edits.
  7. Restart resilience: Restart the supervisory service (flMain). All custom graphics, animations, and handlers should restore without manual intervention.
  8. Multi-client test: Repeat the visibility and navigation tests on at least two clients (one with 32-bit color, one with 16-bit) to surface palette-related display bugs.

How do I add a logo to a FactoryLink Application Editor screen?

Save the logo as an uncompressed Windows BMP with the same file stem as the target drawing (e.g., MENU.G ↔ MENU.BMP) and copy it to {FLAPP}\USER\DRW. The bitmap becomes the drawing background at design time and runtime. Use BI_RGB compression and 8-bit or 24-bit color depth.

Can I insert an image object inside a drawing like in WinCC?

No. Application Editor has no Insert → Image command. It only consumes a same-stem BMP in {FLAPP}\USER\DRW as a full background. For inline images or partial overlays, migrate to WinCC or use Symbol Animation with a pre-rendered bitmap variant.

How do I hide and show an object based on a tag?

Use Symbol Animation for static 0/1 visibility, or PowerVB script on OnShow / tag-change to move the object to (-32000, -32000) and back. The off-screen move is the field-proven pattern when flipping Visible=0 alone does not redraw correctly on legacy GDI stacks.

How do I create a button that opens another drawing?

Draw a rectangle, apply Button Animation with Action Type = DRW, and enter the target drawing stem without the .G extension. For security gating, use DRW_S with a numeric level code, or wrap a PowerVB OnClick handler that checks operator level before calling OpenDrawing.

How do I create a toggle button in FactoryLink 7.5?

FactoryLink 7.5 has no built-in toggle animation. Attach a PowerVB OnClick handler that reads the current tag value and writes the opposite, e.g., If TAG = 0 Then TAG = 1 Else TAG = 0. Bind the handler name in the Button Animation Value field with Action Type = VB. For audit trails, write through the configured command channel rather than the live value tag.

Which FactoryLink version is the last to support Application Editor graphics?

Application Editor graphics and the {FLAPP}\USER\DRW file-stem BMP convention are a FactoryLink 7.x feature. Siemens WinCC Comfort/Advanced panels and TIA Portal use PDX/EMF faceplates, not the .G drawing format, so a converter or full migration is required for new projects.

Back to blog