VSIKnowledge

Reference

The command file grammar, as vsiBuild 2026.2 accepts it

A twin is a text file of vsiBuild commands. This page shows every command the workspace's generators emit, in the form the binary accepted, with the six places where the vendor PDF and the binary disagreed marked. When in doubt, ask the binary: a command file containing help, help -gateway c++2DtCan or help -command "define frame" followed by quit returns the real syntax in about two seconds.

Header

set digitalTwinName WildfireDT
set workspaceDir ./workspace
set digitalTwinPlatform mingw64
set simulationStep 100000
set totalSimTime 10000000

Times are in nanoseconds. workspaceDir may be absolute (D:/wfpy); the twin folder is created under it with the twin's name.

Components and ports

add component -type C++ -name Navigation_Unit
add port -componentName Navigation_Unit -name navBus_p -gateway c++2DtCan
add port -componentName Navigation_Unit -name navTime_p -gateway c++2DtGenericPayload
add component -type Python -name Landing_Gear_System
add port -componentName Landing_Gear_System -name lgWow_p -gateway python2DtGenericPayload
  • Types used here: C++ and Python. The vendor also lists SystemC, FMU, ROS, Simulink, VirtualPlatform, vSensor and others (reference/gateways-and-protocols).
  • One port per protocol per component, except AXI and GPIO (binary rule; the generator merges ports to satisfy it and reports every merge).
  • SPI and LIN ports take -nodeType master or slave; the generator makes the first port on a bus the master and lists that as an assumption. CAN Python ports take -canVersion can.
  • Correction 1: there is no c++2DtUart gateway (only vpUart2DtUart and physicalUart2DtUart). Correction 2: c++2DtGpio exists but its signals connect only to a virtual platform. Both protocols between two generated components ride c++2DtGenericPayload.

Signals

define componentSignals -componentName Navigation_Unit -signals [navBus_thermal:int:in_out,navTime_navTime:int:input]
  • One line per component listing every signal as NAME:TYPE:DIRECTION with directions input, output or in_out. Correction 3: typed and directed, with NO spaces anywhere in the list.
  • A component with no signals is refused at generate ("No signals are defined for component").
  • Type here is always int because Teamcenter records no signal type; the vendor supports the usual C scalar types, arrays and strings (the Python skeleton's pack table covers ? b B h H i I l L q Q f d s).

Point-to-point signals: connect signals

connect signals -sourceSignal Landing_Gear_System.lgWow_wow -destSignal Flight_Control_Computer.fccWow_wow -sourcePortName lgWow_p -destPortName fccWow_p
  • One line per signal per destination; a source may feed many destinations.
  • Correction 4: the two ends must have OPPOSITE directions (output to input); two in_out ends are refused. The generator decides roles per bus first and declares the signals to match, listing any case where the recorded Teamcenter direction disagreed.
  • Used for GenericPayload, and for UART and GPIO folded onto it.

Ethernet sockets: add portSocket

add portSocket -componentName Dissemination_Segment -portName ethernet_p -ipPortNum 8800 -socketType server -protocol tcpIp
add portSocket -componentName Public_Alerting_Authority -portName capSvc_p -ipPortNum 8800 -socketType client -protocol tcpIp
  • Correction 5: a tcpIp portSocket takes at most TWO VSI ports, one server and one client on one ip port number. A bus with more members becomes hub-and-spoke: the hub opens one server socket per client, each on its own number.
  • One port may carry many sockets of mixed roles, but not a server and a client of the same ip port number ("port socket number already exists"); the generator omits such spokes and lists them.
  • No connect signals line goes over a socket in the generated twins; sockets exist, no signal-level data crosses them.

CAN and LIN frames: define frame

define frame -componentName Acoustic_Sensor_Array -portName acsBus_p -id 0x100 -signals [acsBus_thermal:0:8,acsBus_modeCmd:8:8,acsBus_cryo:16:8] -idType standard
  • One line per node on the frame, each listing NAME:STARTBIT:WIDTH for the signals it carries. Correction 6: the list uses square brackets, no braces, no spaces.
  • A frame is at most 64 bits; the generators lay out 8 bits per signal and say so.
  • Every node that defines the frame transmits it every step. Consumers must be muted in their behaviour or they drown the producer (running-and-controlling/stimulus-glue-and-rates).

Other connections: connect ports

AXI, PWM and GenericPayload-to-GenericPayload port connections use connect ports; the Teamcenter pipeline has not needed it (the AXI interface on the tier has no ports).

Footer

generate -overwrite -no-build
quit

-overwrite is required to regenerate an existing twin; without it a second generate does nothing and says nothing. -no-build leaves compiling to mingw32-make compile build so glue can be applied between the two. quit ends the session; without it vsiBuild waits at its own prompt.

Comments

Lines starting with # are ignored by vsiBuild. The generators write # bus NAME [PROTOCOL] ... above each connectivity group; the glue keys per-bus periods on that comment and reads the name as one token, so bus names carry no spaces.

Source: InnexisVsiBuilderSimulatorGuide.pdf chapter 3 (VENDOR); innexis-vsi/README.md grammar table, icd_to_vsi.py, sysml2vsi.py, generated command files (EXERCISED 2026-09-05 to 2026-09-08) · retrieved Tue Sep 08 2026 00:00:00 GMT+0000 (Coordinated Universal Time)