New LogicLab 4 features become selectable after a legacy .ppjs project is saved as .plcprj and reopened. That conversion changes the project container, but it does not convert Ladder Diagram programs created with the LogicLab 3 editor to the new LD editing style. Commission the project by checking the format, target, LD behavior, variable declarations, and selected function-block instance in that order.
Where does the project-opening path stop?
Follow the project data path first: LogicLab 4 opens the project container, loads the target configuration, and then selects the editor behavior stored for each program. A legacy project can therefore open and compile while the option for new functionality remains unavailable.
| Observed condition | Stopping point | Required action | Proof before continuing |
|---|---|---|---|
| New-feature option is disabled | The project is still stored as .ppjs
|
Use Save As to create a .plcprj project, then reopen it |
The project filename has the new extension and the option becomes selectable |
| A new project for an older target starts in the old format | The selected target causes LogicLab 4 to default to .ppjs
|
Create the project, save it, reopen it, and save it as .plcprj
|
The converted project reopens under the intended target |
| New project-level features are enabled, but an old LD program still lacks new LD tools | The program retains the legacy Ladder editor style | Treat project-format conversion and LD-editor behavior as separate decisions | A newly created LogicLab 4 LD program can use the new tools while the legacy LD remains in its old style |
The first check is the project extension shown by the open project. Do not start troubleshooting individual ladder objects until the file is confirmed as .plcprj.
Which project format should be selected?
The two extensions control different project-format paths. Legacy LogicLab 3 projects use .ppjs; the new format is .plcprj. LogicLab 4 permits the latter to use its new project features.
| Project or target selection | Initial format | New features initially available | Commissioning decision |
|---|---|---|---|
| Existing LogicLab 3 project | .ppjs |
No; activation is disabled | Save As .plcprj and reopen |
New project with XTarget 12.0
|
.plcprj |
Yes, by default | Continue with the target and project checks |
| New project with another target | .ppjs |
No, until conversion | Create in the default format, then convert through Save As |
The .plcprj format is compatible with all targets described here. For targets before XTarget 12.0, LogicLab 4 uses configuration files from older LogicLab versions; this is why those selections still create .ppjs projects by default. The default extension reflects the configuration path, not a target incompatibility.
Check that the converted file still names the required target and can be opened normally. A changed extension alone is not the final commissioning result; the target association must remain correct.
How is a legacy project converted without changing its target?
- Open the existing
.ppjsproject in LogicLab 4. - Record the selected target so the same target can be checked after conversion.
- Use Save As and select the
.plcprjextension. - Close the project. Reopen the newly saved
.plcprjfile rather than continuing in an uncertain in-memory state. - Open the project options and activate the required new functionality.
- Build the project and review each reported name or ladder-structure error before changing logic.
For a new project that must use a target other than XTarget 12.0, first let LogicLab create its default .ppjs file. Then apply the same Save As and reopen sequence. Changing the project format is the conversion step; selecting a different target is neither required nor a substitute for it.
The check is a clean reopen of the .plcprj file with the original target still selected and the project-level feature controls available.
Why do old Ladder Diagrams still lack the new controls?
Project-container conversion does not rewrite an LD program created with the old editor. Those programs continue to use the old Ladder style, so new controls such as the newer insertion-point functions remain unavailable inside them. A native LogicLab 4 LD program can expose the new controls even when a converted legacy LD in the same engineering workflow does not.
| Symptom | Cause | Action | Verification |
|---|---|---|---|
| Project options allow new features, but LD insertion controls remain inactive | The LD program originated in the LogicLab 3 editor | Keep editing it with the legacy LD rules, or create a native LogicLab 4 LD program when the new editor functions are required | Compare control availability in the legacy LD and a newly created LD |
| New project-level functions remain unavailable everywhere | The open file is still .ppjs
|
Repeat the format conversion and reopen the correct file | Confirm the active filename and project options |
| Editing a network containing function blocks becomes unstable around coils | The edit is crossing structural rules of the legacy LD network | Preserve a terminating coil on every logical branch and avoid restructuring around an irremovable first coil | The network builds without an unterminated branch or placeholder-name error |
If full use of the new LD editor is the design requirement, create the program in the LogicLab 4 style and transfer logic deliberately. Do not treat saving the outer project as a conversion of every internal graphical program.
The check is visual and functional: insertion-point commands must operate in a native LogicLab 4 LD, while a legacy LD is expected to retain the older editing model.
How should coils be handled in converted LD networks?
Every logical LD branch needs at least one terminating coil. On affected legacy networks, particularly networks that also contain function blocks, the first coil created may resist deletion while later parallel coils can be removed. Attempts to attach another coil to a function block away from the main network have also caused the IDE to crash.
Use a disposable Boolean termination rather than forcing a structural edit that the legacy diagram cannot represent safely:
- Identify each logical branch that lacks a valid terminating coil.
- Declare a placeholder variable of type
BOOL. - Place that variable as the termination coil on branches that need a structural endpoint but no application output.
- Retain the first coil if the legacy editor will not delete it; rename or redirect it to the placeholder rather than repeatedly attempting the failing edit.
- Build after each network change so the edit that introduces an error remains identifiable.
- Save, close, and reopen the project to confirm that the diagram persists without editor damage.
The placeholder coil satisfies the LD branch structure; it should not be reused as an application command whose state has another meaning. Give it a name that marks it as a nonfunctional termination according to the project naming convention.
The check is a successful build with every branch visibly terminated and no need to attach a secondary coil directly to a function-block object.
Why does renaming an FB instance produce a build error?
The graphical diagram and variable list do not currently perform automatic refactoring. Renaming a function-block instance on the LD does not rename its declaration in the variable list, and changing the declaration does not rename the object on the diagram. The two text identifiers then address different symbols, so compilation fails until they match.
The requested refactoring capability was recorded as enhancement ticket #LL1546. Until that function exists in the installed environment, treat every instance rename as a two-location transaction:
- Record the original instance name and the intended new name.
- Rename the instance on the graphical diagram.
- Open the applicable variable list and apply the identical name to the declaration.
- Search the project for the original identifier and resolve every remaining intended reference.
- Build immediately and use the compiler location to find any missed declaration or use.
This is not limited to function blocks: a variable created from an LD can appear in the variable list, yet later edits on either side can lose name alignment. Avoid making a batch of graphical renames before updating declarations because the resulting compiler list will no longer identify one isolated change.
The check is a project search with no unintended occurrence of the old identifier, followed by a build with no unresolved or mismatched variable name.
How is the correct FB instance selected during debug?
A function-block definition can execute through multiple instances. Opening its source only identifies the shared implementation; useful live values require an instance context. LogicLab 4 supplies that context when the debug request reaches an internal function-block variable or an instantiated graphical object.
| Debug path | User action | Selection point | Expected result |
|---|---|---|---|
| Watch window | Drag an internal FB variable into the watch window | LogicLab displays a prompt for the instance to observe | The watched value belongs to the selected running instance |
| Graphical source | Activate debug, then double-click the object to analyze | LogicLab opens the instance-selection prompt | The graphical debug display follows the selected instance |
Use the watch path when individual internal values are the main diagnostic target. Use the graphical path when power flow or related object states inside an LD or another graphical function-block source must be observed together. If two programs call the same FB definition, select the required instance at the prompt; otherwise the shared source view alone does not identify which execution context is being inspected.
End-to-end verification starts from the converted .plcprj file: confirm the original target, activate the required project features, build with synchronized instance names, enter debug, double-click the required FB object, select its instance, and verify that the graphical values change with that instance while another instance follows its own inputs.
FAQ
Why does LogicLab 4 disable new features for my old project?
The project is open in the legacy .ppjs format. Save it as .plcprj, close it, and reopen the new file before activating the features.
Why does a converted LogicLab 3 Ladder Diagram still use the old editor?
Saving as .plcprj converts the project container, not the editor style of existing LD programs. Create a native LogicLab 4 LD when the newer insertion and editing controls are required.
Why does LogicLab show the wrong FB values during debug?
The shared FB source needs a running-instance context. With debug active, double-click the object, select the required instance in the prompt, and verify its displayed values against that instance's inputs.