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++andPython. 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 masterorslave; 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++2DtUartgateway (onlyvpUart2DtUartandphysicalUart2DtUart). Correction 2:c++2DtGpioexists but its signals connect only to a virtual platform. Both protocols between two generated components ridec++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:DIRECTIONwith directionsinput,outputorin_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
intbecause 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 (
outputtoinput); twoin_outends 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
tcpIpportSocket 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 signalsline 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:WIDTHfor 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)