Simulation Functionality

From Flowcode Help
Jump to navigationJump to search

In Flowcode, simulation allows you to test and debug your embedded system designs without needing physical hardware. It provides a visual environment where you can run your program, interact with components, and observe their behavior in real-time. The simulation includes features like breakpoints, variable tracking, and real-time data display, helping you identify issues and optimize your design before uploading it to the actual hardware.

Flowcode's simulation feature offers a powerful environment for testing and debugging embedded system designs. Here’s more detail on its capabilities:

  • Real-Time Simulation: You can run your design as if it were on actual hardware, with real-time updates on how components like LEDs, sensors, or motors behave in response to the programmed logic.
  • Interactive Testing: Many components allow user interaction during the simulation. For example, you can press virtual buttons, adjust sensor values, or modify inputs to see how the system responds.
  • Debugging Tools: The simulation includes essential debugging features like breakpoints, step-by-step execution, and variable tracking. This lets you pause and inspect your program at specific points to identify issues or optimize performance.
  • Graphical Feedback: Data like sensor readings or communication signals can be visualized using built-in graphs and data monitors, making it easier to observe trends and behaviors over time.
  • Component Visualization: Physical components, such as displays or motors, are visually represented, so you can see how they would react in a real-world scenario, enhancing understanding and design verification.
  • Error Checking: Flowcode provides error messages and warnings during simulation, helping catch issues like incorrect component configurations or logical errors in the code.

Simulation in Flowcode helps streamline the development process by allowing thorough testing before deployment to hardware, reducing errors and saving time in the prototyping phase.

Built in functions

Property
GetValue Gets the value of a property as a string
SetColor Sets a components 'color' property as a R,G,B value
SetValue Sets a components property as a string
CopyValue Copies a property value from one target to another
SetChildValues Sets all child components property as a string
CopyChildValues Copies the values of a properties children from the source to dest
SetVisible Sets whether the property is visible or not
SetWritable Sets whether the property can be edited in the UI or not
GetVisible Gets whether the property is visible or not
GetWritable Gets whether the property can be edited in the UI or not
GetFilter Gets a components property filter string for lists, files, etc
SetFilter Sets a components property filter string for lists, files, etc
CopyFilter Copies a property filter from one target to another
GetListIndex Gets a single lists index value from a property by line number
GetListItem Gets a single list entry from a property by named index
SetListItem Sets an existing list entries text for the property by named index
AddListItem Alters or appends a list entries text for the property by named index
GetPanel Returns the id of the panel hosting the component
SetInteractive Sets whether a component can interact with the mouse
GetInteractive Gets whether a component can interact with the mouse
SetVisible Sets whether a component can be seen on the panel
GetVisible Gets whether a component can be seen on the panel
SetSolid Sets whether a component is checked in collision detections
GetSolid Gets whether a component is checked in collision detections
SetCompile Sets whether a component is considered for compilation or not
GetCompile Gets whether a component will be compiled or not
GetInstance Gets the type-instance of the component, >= 1 is valid
FindChild Finds a named object that is part of the component
GetRoot Gets the root component handle
GetTopParent Gets the top-level owner of the component
GetParent Gets the owner of the component
GetNext Gets the next (younger) sibling of the components handle
GetLast Gets the previous (elder) sibling of the components handle
GetChildHead Gets the first (eldest) child of the component
GetChildTail Gets the last (youngest) child of the component
GetOriginal Gets the original definition of the component, returns Current if no original copy
Clone Clones an existing object to another position on the panel
Delete Deletes an existing object, removing it from the panel
GetPanelName Returns the name of the panel from the id
GetPanelBkColour Returns the main background colour of the panel
Get2dPanelCount Gets the number of 2d panels
Create2dPanel Creates a new 2d panel
AddNewComponent Adds a new component to a panel
Position
GetWorldPosition Returns the positions coordinates in (X,Y,Z) array
GetWorldSize Returns the component size in (X,Y,Z) array
SetWorldPosition Moves the object to the given coordinates in World coordinates
SetWorldSize Sets the objects size to a value
Get Gets a handle to an object representing the components current position
GetOrigin Gets a handle to an empty position
Set Sets an objects position based on a component or pre-defined position
SetCoords Sets an objects coordinates based on a position
SetScale Sets an objects scale based on a position
SetRotation Sets an objects orientation based on a position
GetBox Gets a handle to an object representing the components bounding box position
GetLineNodes Returns the position of a line's nodes as a comma-separated list
SetLineNodes Sets the nodes of a line
Morph Blends positions from two sources to a destination
Animate Blends positions from two sources to a destination over time
StopAnimate Stops all animations started by this component
MoveAlong Moves the object by the given offset relative to its parent along an axis
MoveBy Moves the object by the given offset relative to its parent
MoveTo Moves the object to the given coordinates relative to its parent
ScaleTo Sets the objects scale to a value
ScaleUp Multiplies the objects scale by a value
ScaleDown Divides the objects scale by a value
RotateTo Rotates the object to the given rotation
RotateAlong Rotates the object by the given rotation along an axis
RotateX Rotates the object around the X axis
RotateY Rotates the object around the Y axis
RotateZ Rotates the object around the Z axis
GetCoords Returns the positions coordinates in (X,Y,Z) array
GetScale Returns the positions scale in (X,Y,Z) array
GetQuat Returns the positions quaternion in (X,Y,Z,W) array
GetEuler Returns the positions euler angles in (P,Y,R) array
Math Coordinate maths functions
Panel2D 2D Panel functions
Camera Camera positioning for 3D panel
PCloud
Create Creates a new point cloud tied to a position handle
SetVisible Sets whether the point cloud is displayed or not
SetPos Sets the position for the point cloud to be located at
GetPos Gets the position the point cloud is located at
SetPoints Sets the X,Y,Z point lists
SetPointsEx Sets the X,Y,Z point lists
SetGrid Sets the X,Y,Z point lists in a height-map grid
SetGridEx Sets the X,Y,Z point lists in a height-map grid
SetGridFlat Sets the X,Y,Z point lists in a flat height-map grid
SetGridPoint Given an XY on the grid, sets the vertex value at that point
UnitScale Creates a unit scaled axis (X, Y or Z) with a center of zero and a range of two
SetColor Sets the RGB colour of the entire cloud
SetColors Sets the RGB colour of the individual points in the cloud
SetGridColor Given an XY on the grid, sets the vertex colour at that point
SetMode Sets the rendering mode of the point cloud
SetPointLight Enables or disables simple lighting for point mode, providing a normal passing through the point and (0,0,0)
Update Manually refresh the screen the point cloud exists on
LinkBar
Create Creates a new bar linking a pair of position handles
SetVisible Sets whether the link is displayed or not
SetStartPos Sets the position for the start point of the bar
SetEndPos Sets the position for the end point of the bar
SetStartAdjustment Sets the clipping adjustments for the beginning of the link
SetEndAdjustment Sets the clipping adjustments for the end of the link
SetStartGfx Sets the graphic for the start point of the bar
SetBarGfx Sets the graphic for the main line of the bar
SetEndGfx Sets the graphic for the end point of the bar
GetStartPos Gets the position the bars start point is located at
GetBarPos Gets the position the bar is located at
GetEndPos Gets the position the bars end point is located at
Update Manually refresh the screen the bar exists on
EnableAuto Sets whether Flowcode should automatically draw links for component object property types
TextLabel
Create Creates a new text label that always faces the camera
SetVisible Sets whether the label is displayed or not
SetPos Sets the position for the point to draw the text at
SetOffset Sets the offset from the SetPos() position for the label
SetText Sets the text for the label
SetScale Sets the multipliers for the width and height of the label
SetColors Sets the foreground and background colours for the label
SetViewMode Sets whether to draw at a fixed size or to scale based on distance from the camera
GetPos Gets the position the label is located at
Update Manually refresh the screen the label exists on
Collision
TestTable Tests whether an object collides with the table top, returns Z distance to move to rest on the table
TestSingle Tests whether an object collides with a position
GetSingleAxis Tests whether an object collides with a position
GetSinglePos Returns the position to move Pos to so it does not collide with Test - null if no collide
GetMultiAxis Tests whether an object collides with a position
GetMultiPos Returns the position to move Pos to so it does not collide with any other object - null if no collide
Graphics
Redraw Sends a redraw request to the given component
SetColor Sets the draw colour for and subsequent graphics objects
SetColorRGB Sets the draw colour for and subsequent graphics objects
SetTextFont Sets the text font for subsequent text objects
SetTextScale Sets the text scale for subsequent text objects
SetLineThickness Sets the thinkness when drawing lines and points
DrawCreate Creates a drawing area on a shape
DrawBegin Begins drawing on a given shape
DrawEnd Ends drawing started with DrawBegin()
DrawDelete Deletes a drawing area for a shape
DrawText Draws a line of text texture
DrawPoint Draws a point on a texture
DrawLine Draws a line on a texture
DrawLineA Draws a smooth line on a texture
DrawRect Draws a rectangle on a texture
DrawCircle Draws a circle on a texture
Clear Clear texture to the given component
Shape Routines to change the last drawn shape
GetButtons Gets the button state from the mouse: 4 for left, 1 for right
GetFocus Gets the handle of the component under the mouse
GetPosition Gets the position of the mouse, intersecting with a component or the viewing plane
GetPosition2D Gets the X/Y position of the mouse in screen coords
GetClickSide Gets the side of the component clicked on, 0 to 5
SimClick Simulates a click on an object
SimDrag Simulates a click-drag on an object
SimRelease Simulates a click-release on an object
KeyDown Simulates a key-press on an object
KeyUp Simulates a key-release on an object
GetItemValue Gets a paths item value from the FCD document
GetItemHandle Gets a FCD items handle, suitable for traversal with the Tree API
GetPathHandle Gets a FCD paths handle, suitable for traversal with the Tree API
SetItemValue Override item value from the FCD document from path
ResetItemValue Reset paths item value from the FCD document
Play Plays a formatted file sound, returns true if the sound played OK
LoadWav Loads a wave file into memory, providing the values needed to play it
Create Creates a sound object that data can be played through
SetVolume Sets the volume of playbacks for this sound
GetVolume Gets the volume of playbacks for this sound in the range 0 to 1
GetBits Gets the number of bits per sample for the sound
GetRate Gets the current sample rate for the sound
SetRate Sets the current sample rate for the sound - this will stop the playing sound
Queue Queues a sound for playing
QueueEx Queues a sound for playing, with the format provided
Flush Stops all playing and queued sounds
GetPending Gets the number of sample blocks queued or playing for the sound
AddGroup Adds a group to the scope to which streams may be added
ShowGroup Sets the visibility of the given group
AddStream Adds a stream to the given group suitable for inputs and operations
AddBuffer Adds a fixed-view stream to the given group suitable for inputs and operations
Rename Renames the given scope group, stream or buffer
SetYAxisLabels Sets the labels for the Y-axis of the given stream
SetLineColor Sets the group, stream or buffers line colour
GetLineColor Gets the streams line colour
SetBackColor Sets the groups background colour
GetBackColor Gets the stream groups background colour
SetDecodable Sets whether a stream can be decoded via the components event - defaults to 'true'
GetDecodable Gets whether a stream can be decoded via the components event - defaults to 'true'
AddPort Adds an input to the stream from a port
AddAnalog Adds an input to the stream from an analog channel
AddCustom Adds an input to the stream from a custom injection
AddOp Adds an operation to act on the inputs of the stream
ClearOps Clears all inputs and operations from the given stream
SetBuffer Sets the contents of a snapshot stream
SetCustom Sets one of 32 custom analog values for the group
GetSnapshot Gets a block of the output stream with each input sample operated on, returns number of samples read
FindOutput Searches back through the output history for a value, returns offset of found sample from TimeUS, 0 if not found
FindPeriod Attempts to calculate the wave period given a series of transitions for the stream, returns calculated period
SetPacketFmt Sets the graphical format of the packets added with AddPacket and Add...Packets
GetPacketFmt Returns the graphical format of the packets added with AddPacket and Add...Packets
AddPacket Adds an overlay packet to the stream at a given offset from the current time
AddStepPackets Adds overlay packets to the stream by decoding the stream contents with a fixed period rate
AddSyncPackets Adds overlay packets to the stream by decoding the stream contents with a variable period rate
ClearPackets Clears existing overlay packets from the stream
ClearAllPackets Clears all existing overlay packets from the stream
TicksToSecs Converts a duration in ticks into a time in seconds
SecsToTicks Converts a time in seconds into a duration in ticks
FloatToStorageULong Converts a float to an array containing 4 bytes
StorageULongToFloat Returns a float value from an unsigned long representation (used to store or transfer it)
GetFrequencyArray Calculates the frequency from an array of data.
GetAmplitudeArray Calculates the amplitude from an array of data.
AddText Adds a window to the list of consoles available
AddMemory Adds a window to the list of consoles available
GetDefault Gets the default (read-only) console window
GetConsole Gets a console window
GetName Returns the name of a console
Rename Renames the given console
SetMemMode Sets whether to show address and bytes for the console
SetInputRGB Sets the colour of text inserted by the user from now on
SetOutputRGB Sets the colour of text inserted by the component from now on
WriteText Adds a block of text to the console window
GetLineText Reads a line of text from the given console, pass -1 for final line
SetLineText Writes a line of text from the given console, pass -1 for final line
GetLineBytes Reads a line of bytes from the given console extending the array if needed
SetLineBytes Writes a line of bytes from the given console, pass -1 for final line
CountLines Counts the number of lines in the console
ClearText Clears all the text in the console
GetPort Gets a ports value from its index
SetPort Sets a ports value from its index
GetAn Gets an analog value from its channel index
SetAn Sets an analog value from its index, range 0->1
DecodePort Gets a ports details from its name or index
PathName Expands a string using the built-in pathname expansion variables
MacroName Expands a string to the name of a macro used in the generated code
VarName Expands a string to the name of a global variable used in the generated code
Property Expands a string to the name of a property used in the generated code
MacroHead Expands a macro name to the code generated for the header of that macro
MacroBody Expands a macro name to the code generated for the body of that macro
MacroTail Expands a macro name to the code generated for the tail of that macro
GetValue Gets the value of the given object, if available
GetName Gets the name of the given object
GetPath Gets the full '.' separated name of the given object
GetSubValue Gets the value of a named sub-item of the given object, if available
Traverse Updates the object to step depth-first through the tree
StepNext Updates the object to point to the next (younger) sibling
StepNamedNext Updates the object to point to the next (younger) sibling matching the name
StepNamedIndex Updates the object to point to the Nth next (younger) sibling matching the name
StepLast Updates the object to point to the last (elder) sibling
StepParent Updates the object to point to its parent object
StepRoot Updates the object to point to the root of the tree
StepChildHead Updates the object to point to the head (eldest) child
StepChildTail Updates the object to point to the tail (youngest) child
StepChildPath Updates the object to point to the '.' separated named child path
CountChildren Returns the number of immediate children present for the object
CheckChildren Returns true if the object has children, else false
CountNamedChildren Returns the number of immediate children present for the object
CheckParent Returns true if the object has a parent, else false if it is the root
StepSubHead Updates the object to point to the head (eldest) attribute, if any
StepSubTail Updates the object to point to the tail (youngest) attribute, if any
StepSubName Updates the object to point to the named attribute, if any
GetCopy Creates a copy of the handle and returns the copy
AbsPath Gets an absolute path from a relative filename
RelPath Gets an relative path from an absolute filename
CreateDir Creates a directory structure
GetType Finds the type of a file: 0=Unknown, 1=File, 2=Dir, 4=Disk
GetSize Gets the number of bytes in the file, by handle or name
Delete Deletes the file or directory structure
Create Creates the new file as a standard stream
Open Opens the existing file as a standard stream
ReadArray Reads an array from the file, returns elements read
WriteArray Writes an array to the file
SetPos Sets the position of the next read or write in the file
GetPos Gets the position of the next read or write in the file
Flush Writes all unwritten data to the file in one block
Buffer
Open Opens the existing file as a circular buffer
Create Creates the new file as a circular buffer
ReadByte Reads a single byte from the input stream, -1 if empty
WriteByte Writes a single byte to the input stream
ReadArray Reads an array from the input stream, returns elements read
WriteArray Writes an array to the input stream
NVM
Open Opens the existing file as a block of non-volatile memory
Create Creates the new file as a block of non-volatile memory
ReadByte Reads a single byte from the NVM, -1 if empty
WriteByte Writes a single byte to the NVM multiple times
ReadArray Reads an array from the NVM, returns elements read
WriteArray Writes an array to the NVM
SimpleMsgBox Displays a simple 'Ok' message box
Win32MsgBox Invokes the Win32 API MessageBox function
YesNoMsgBox Displays a simple 'Yes/No' message box
YesNoCancelMsgBox Displays a simple 'Yes/No/Cancel' message box (0 == Cancel, 1 == No, 2 == Yes)
InputMsgBox Displays a message box that allows the user to input text. Returns true if 'Ok' clicked, false otherwise
GetMillisecs Returns the value of a monotonic non-decrementing millisecond counter
GetUTC Returns the current UTC Modified Julian Date value
GetLocal Returns the current local time as a Modified Julian Date value
AddMJD Increments or decrements a Modified Julian Date and millisecond value
MJDToDate Converts a Modified Julian Date into a Gregorian calendar date
DateToMJD Converts a Gregorian calendar date into a Modified Julian Date
MJDToSeconds Converts a Modified Julian Date into a number of seconds since a specified epoch
SecondsToMJD Returns the Modified Julian Date given by the number of seconds since a specified epoch
MJDToWeekday Gets the day of the week that the MJD represents
GetLeapYear Returns true if the given year is a leap year, else false
GetMonthDays Returns the number of days in the given month
Translate Takes English text and optional hint and converts to the current language
Notify Sends a System.User message to the targeted component
Forward Sends the currently processing message to the target
MacroExists Returns true if the macro exists
CallMacro Calls a macro
ShowHandle Given a handle to an object with viewable presence, shows that object on screen
CreateHandle Creates a general-purpose garbage collected handle for resource management
SetHandleWord Sets a general purpose word in the handle for use by its owner
GetHandleWord Gets a general-purpose word set by the owner of a custom handle
DeleteHandle Deletes any handle created by the component
GetSender Gets the handle of the component that posted this event - 0 for system
TimerStart Calls the Component.Timer event with Ident as an argument after Millisecs time
TimerStop Kills any timers with the given ident for this component
WDTEnable Enables or disables the software watchdog during long operations
ClaimEvent Claims an event message by name, returns true if claimed
ReleaseEvent Releases a previously claimed an event message by name, returns true if released
EnableEvent Allows an event to be fired or removes the ability for an event to fire - this may be nested
ClaimMouse Claims mouse clicks for the target object
ReleaseMouse Releases mouse clicks for the target object
RedirectMacros Allows calls to one of your children to be redirected to another component
StartSim Start the simulation engine
StopSim Stop the simulation engine
SetSimSpeed Sets the speed the simulation engine
SetClipboardData Sets the clipboard with text data
ReadClipboardData Reads text data from the clipboard
GetHasFocus Checks to see if a Flowcode window has the focus
ShellExecute Launches an external file or program on this computer
WriteRegistryInt Writes an integer value to the registry
WriteRegistryString Writes a string value to the registry
ReadRegistryInt Reads an integer value from the registry
ReadRegistryString Reads a string value from the registry
Print Prints out the string or value on a line in the debug window
PrintLn Prints out the string or value with a new-line in the debug window
TestFunction Temporary debug function

Events

Preprocess Broadcast to all components immediately before compilation is started
AddProperty Sent to a component to allow dynamic amendment of global property declarations
AddConst Sent to a component to allow dynamic amendment of global variable declarations
AddVarSize Sent to a component to allow dynamic amendment of global array-size declarations
AddVar Sent to a component to allow dynamic amendment of global constant declarations
AddHeader Sent to a component to allow dynamic amendment of header code
AddInterrupts Sent to a component to allow dynamic amendment of the interrupts for a component
AddInterrupt Sent to a component to allow dynamic amendment of a single interrupts code
Start Broadcast to all components that compilation is starting
Stop Broadcast to all components that compilation has stopped
GetVarSize Sent to a component to amend the size of the expected array
HtmlBodyInfo Sent to a component to retrieve tags to be placed in the html body
HtmlScriptHeader Sent to a component to retrieve script code to be placed in the html header section
PropertyEx Sent when a property has been changed by the User (specific property and value identified)
Property Sent when a property has been changed by the User
ProjectClosedown Sent to the component when the project is closing
Added Broadcast to all existing components once a new component has been added
Adding Broadcast to all existing components when a new component is about to be added
Resize Sent to the mouse target when the user has altered the position of a component child
Removed Broadcast to all remaining components after a component has been removed
Removing Broadcast to all existing components when a component is about to be removed
Renamed Sent to the component when the component is renamed
Deleted Closedown routine for the component
Deleting Send to a component when it is being deleted
Initialise Initialisation routine for the component once the component is linked to its parent
Initialising Initialisation routine before the component is linked to its parent
AddLine Post to the owning component when a line is inserted by the user
TextChanged Post when the console text is changed by the user in some way
MemChanged Post when the console memory is changed by the user in some way
PinPopulate Sent when auto-populate of digital connections is requested
PinChange Sent during simulation if a connected port pin changes
AnPopulate Sent when auto-populate of analog connections is requested
AnChange Sent during simulation if a connected ADC channel changes
ChipChange Sent when the target device has changed
Unconnected Sent when the component is compiled with unconnected pins
FCDChange Sent when some settings of the target device have changed
Pause Broadcast to all components that simulation has paused
Resume Broadcast to all components that simulation has resumed
Start Broadcast to all components that simulation is starting
Stop Broadcast to all components that simulation has stopped
CleanHandle Called when a custom handle is deleted to allow cleanup of resources
Timer Called back on the panel command System.TimerStart
User Called back on the panel command System.Notify
LoadComplete Broadcast after a project has finished loading
Complete Sent when a sound queued by the component has finished playing
ResyncPacket Sent when Packet_ResyncEv is specified in scope decoding
Decode Sent when a block of the stream is to be decoded into packets
FmtPacket Sent when a %e is read in a format string when decoding a packet
Overlay Sent when the mouse hovers over a scope stream
GraphicPoll Called when a tooltip graphic is updating with the draw image already pushed
GetText Called when a tooltip text string can be displayed
GetGraphic Called when a tooltip graphic can be displayed with the draw image already pushed
Changed Sent when a file being watched has changed
Closed Sent when a file monitor is being closed
Animated Notification than an animation has finished
Background Updates the background container of the 2d panel
Redraw Reconstructs and redraws the target component
ButtonName Sent to give a meaningful name to a button on a simulated mouse-click
KeyMapDown Post when a mapped key is pressed for the component
KeyMapUp Post when a mapped key is released for the component
MappingKeys Sent to find out how many keys it is possible to map to the component during simulation
MappingName Sent to give a meaningful name to a custom key-map event for a component
Release Post when the mouse is released on a child of the component during simulation
Click Post when the mouse is clicked on a child of the component during simulation
Drag Post when the mouse is dragged on a child of the component during simulation