ReleaseNotes:Feature Review December 2021
The last two years have seen focus on major initiatives for Planimate.
This summary covers Planimate® enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide. File/data operations now enable the developer to control when ASCII or Unicode are used, important for data interchange with systems with different capabilities.
New Licensing System
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate. A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details. Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.
Planimate and dotNET
Planimate is a dotNET application with the core engine and UI being C++ and Win32. This enables it to deeply integrate with dotNET code including embedding of dotNET controls (eg: LiveCharts graphs) into models. There's a mature and straightforward interface between Plamimate's fast Table, Attribute and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing. The core interface is called PLCLR and it provides flexible data conversion to c# types and the ability to browse and use c# class properties and methods from Planimate routine code. An open source c# library, PLEngine enables sophisticated interaction between c# modules and Planimate including interfaces to control the simulator, process data, provide value conversion and access UI features such as fonts and colors. For example, changes made to Planimate Tables can trigger updates in c# code so dotNET graphs automatically update to relfect changes in data or table column structure.
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application (no install or admin access needed). It has minimal requirements and impact on the system it runs on. This makes Planimate LITE ideal for use in educational environments.
More on Planimate LITE here.
Planimate’s ability to use drop-in modules has been completely revamped. Modules are basically Portals with self contained model code which provide useful services to a model. The sidebar includes a new Modules palette. You can drag-and-drop from the modules listed into your model. Planimate includes a couple of modules, an object statistics display (useful for training with Queues and Delays) and a simple graphing module. Both are open source and implemented using Planimate flows and routines. You can add modules to the Modules sub-directory in the directory containing the Planimate executable. New features that benefit modules:
- Planimate is able to run just a subsection of a model even though other parts of the model are not in a ready to run state because they are still being developed. Modules can use this to provide helpful UIs to configure themselves.
- A new default item class “_general” which contains attributes for all Planimate generated broadcasts. Useful for UI and event handling as distinct to the actual simulation.
- A predefined “_Button_Clicked” broadcast so you don’t need to create broadcasts for buttons.
- The ability to use “relative” references to owning portals using s.OwningPortal and to work up the hierarchy using s.OwningPortal.Owner, avoiding the need to have object labels to “target” the parent portals.
- A new “BroadcastLocal()” routine that sends a broadcast scoped to the Code object containing the routine, and waits for it to complete before the item continues. Great for UI update operations.
Major UI & Graphics Changes
- A new Time menu contains options related to simulation time and animation speed.
- New models start with a clock view. Right click it to edit or delete it.
- An explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.
- Area and Line graphs handle huge data sets faster and display it such that peaks and troughs in the data are not lost no matter how much data is being viewed.
- High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed and stop/resume.
Delay (previously called MultiServer)
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.
The item count can now be dynamically changed, it can reference an attribute.
You can have "additional dependencies" explicitly specified so the switch triggers when data indirectly related to the control condition changes. For example, data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.
PickUp and DropOff
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches. Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.
Dynamic Flow Copy/Delete Support
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.
ISO Dates and UTC Time Support
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset. You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom, pan and rotate the view in 3D whilst items animated on it. This was implemented using a module.
Table Reference Using Data OBject Label
Table operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.
- When paused, context clicking objects with capacity lists the items in them.
- Names (objects, attributes, tables, columns, labels) can be longer and include unicode.
- You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.
- You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer module.
- You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.
- There are new Icon commands (preceed an icon name) to flip and create sized icons on the fly.
- The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.