Constructive to Virtual¶
What must be done to change a constructive WSF simulation and have it run real time (virtual)?¶
The following steps outline what must be changed in the WSF input files.
1) Add the command “realtime”.
The “realtime” command will have the simulation run at wall clock speed.
2) Configure the dis_interface block for the tcp/ip parameters.
The command “dis_interface… end_dis_interface” block sets up the parameters required to run WSF over DIS. An example of a multicast interface:
dis_interface
exercise 1
site 25
application 44
multicast 224.2.25.55 192.168.10.32 # Multicast Address / The ethernet device on my PC to use
#broadcast 192.168.10.255 # Broadcast Example
port 3225
end_dis_interface
3) Configure the dis_interface block for the sides.
Map the force side to whatever the side subcommand uses in the scenario files. Example:
dis_interface
#force <side> <dis-force-id>
force blue 1 # default value if side is not specified
force red 2 # default value if side is not specified
force green 3 # default value if side is not specified
## OR ##
force united_states 1
force canada 2
end_dis_interface
4) Map the platform_types to DIS Enumerations in the dis_interface block.
Entity type Enumerations of 00:00:00:00:00:00:00 will be sent out if a platform_type is not mapped. Example:
dis_interface
#entity_type <platform_type> <dis-entity-type>
#munition_type <platform_type> <dis-entity-type> # same as entity_type
entity_type F-15E 1:2:225:1:5:5:0
entity_type F-18E 1:2:225:1:9:10:0
end_dis_interface
5) Map the entity_id manually or automatically in the dis_interface block:
Automatic example:
dis_interface
start_entity 10 # dis entity id starts at 10 {25:44:10 and up for site:application:entity_id}
end_dis_interface
Manual example:
dis_interface
#entity_id <platform_name> <entity-number>
entity_id hornet-1 101 # example: makes a dis entity id of {25:44:101}
entity_id raptor-1 102
entity_id tank-1 103
end_dis_interface
6) Do this step ONLY if dis emission PDUs must be mapped:
In most cases, the emitter_type just needs to be mapped.
dis_interface
#emitter_type <sensor/jammer-type> <dis-emitter-name-enum>
#emitter_function <sensor/jammer-type> <dis-emitter-function-enum>
#beam_type <sensor/jammer-type> <sensor/jammer-mode-name> <sensor/jammer-beam-number>
<dis-beam-parameter-index-value>
#beam_function <sensor/jammer-type> <sensor/jammer-mode-name> <sensor/jammer-beam-number>
<dis-beam-function-enum-value>
emitter_type EW_RADAR_TYPE 11
emitter_type TTR_RADAR_TYPE 12
emitter_type ACQ_RADAR_TYPE 13
emitter_function EW_RADAR_TYPE 2
#sets the function to "2" for the EW_RADAR emitter function (see the dis spec for correct value)
beam_type EW_RADAR_TYPE * * 11
#defaults the beam parameter index to 11 for all undefined modes and undefined beam numbers.
beam_type EW_RADAR_TYPE * 2 12
#sets the beam parameter index to 12 for all undefined mode names except when beam number 2 is defined.
beam_type EW_RADAR_TYPE * 3 13
#sets the beam parameter index to 13 for all undefined mode names except when beam number 3 is defined.
beam_function EW_RADAR_TYPE * 2 22
#sets the beam enum function to 22 for beam number 2 (see the dis spec for the value)
beam_type TTR_RADAR_TYPE TRACK * 30002
#sets the beam parameter index to 30002 when in TRACK mode for all beam numbers
beam_function TTR_RADAR_TYPE TRACK * 7
#sets the function to 7 if in TRACK mode for all beams. (see the dis spec for the value)
end_dis_interface
7) Ensure the usage of static addressing for communications devices, where appropriate.
Communications devices often use dynamic addressing (not explicitly providing an address to a comm) in the constructive simulation use case. If any other simulation is using a network that is also used by local communication devices (including by omitting any input in the case of the default network, or sharing a common network by using the local:master or local:slave, amongst others), then these comms must be given static addresses in order to ensure correct and consistent application of comms addresses across all simulations.
Examples of comm definitions in the constructive use case, prior to necessary changes.
Case 1 - String network name usage:
comm datalink WSF_COMM_TRANSCEIVER
network_name blue_net
end_comm
comm datalink_2 WSF_COMM_TRANSCEIVER
network_name blue_net
end_comm
Case 2 - Command-chain usage:
comm blue_comm WSF_COMM_TRANSCEIVER
network_name <local:master>
end_comm
Case 3 - Default network usage:
comm generic_comm WSF_COMM_TRANSCEIVER
#uses the 'default' network
end_comm
Case 4 - Network address usage:
comm red_comm WSF_COMM_TRANSCEIVER
network_address 192.168.1.1/24
end_comm
Examples of necessary conversions, assuming externally defined comms using the same network.
Case 1 - String network name usage:
comm datalink WSF_COMM_TRANSCEIVER
address 192.168.1.1/24
end_comm
comm datalink_2 WSF_COMM_TRANSCEIVER
address 192.168.1.2/24
end_comm
Case 2 - Command-chain usage:
network master:<commander-platform-name> WSF_COMM_NETWORK_MESH
network_address 192.168.1.0/24
end_network
comm blue_comm WSF_COMM_TRANSCEIVER
address 192.168.1.123/24
end_comm
Case 3 - Default network usage - (Note that the default network is always 0.1.0.0/16):
comm generic_comm WSF_COMM_TRANSCEIVER
address 0.1.22.127/16
end_comm
Case 4 - Network address usage:
comm red_comm WSF_COMM_TRANSCEIVER
address 192.168.1.1/24
end_comm
For more details in regard to why this is necessary, see Communications Primer.
DIS Specific Questions and Answers¶
What must be done to stay within the DIS spec? Other simulations don’t understand some PDUs that WSF is sending out.
The following subcommands in the dis_interface block can be added to force DIS compliance:
dis_interface
maximum_beam_entries 10 # Limit number of beams
maximum_track_jam_entries 10 # Limit track/jam entries to the DIS spec
suppress_non_standard_data true
end_dis_interface
How can I see what is being mapped easily?
Add “log_created_entities” to the dis_interface block. A list of platform_types and dis enumerations will be displayed in the console window at runtime.
dis_interface
log_created_entities
end_dis_interface
I have several platforms at the same lat/lon. How can I make it so platform X is the priority to get hit with an external weapon?
The target_priority command will add bias to the simulation to the priority target when a DIS detonate PDU is received. Here is an example of making all the SAM_FC_RADAR platforms be the highest priority target:
dis_interface
target_priority SAM_FC_RADAR 1000 #This makes the SAM_FC_RADAR types have a huge bias to be killed.
end_dis_interface
How can I make a platform not send any DIS information out to other simulations?
Use the private command:
dis_interface
#private [ name <name> | type <type> | all ]
private type SITE_COMMANDER
private name target-52
end_dis_interface
Can WSF ignore an application that is running? We have 10 simulations running and WSF does not need to interface with application 55.
Yes, use the subcommand “filter_out_by_site_and_app
dis_interface
filter_out_by_site_and_app
ignore_site 25
ignore_application 55
end_filter_out_by_site_and_app
end_dis_interface
The simulation is not starting after I enter the command to run WSF.
This means none of the other sims are sending out a “start” PDU. To start WSF without a “start” PDU:
dis_interface
autostart # Comment this out if someone sends out a start PDU.
end_dis_interface
I keep getting unknown platform warnings. What is this about?
Every external platform that WSF receives must have a platform_type defined along with a DIS enumeration value. When WSF receives a platform over DIS, WSF automatically creates (instantiates) the platform internally and acts upon it. Unknown (not mapped) platforms received over DIS are created internally but will have default values (i.e., extreme signature values) defined for them. First, make a platform_type and assign a signature to it. Second, add entity_type and an enumeration mapping just like it was an internal body.
If WSF receives an entity with 00:00:00:00:00:00:00 or any other enumeration that is not mapped, can it be mapped to something specific?
Yes, use the subcommand unknown_platform_type:
dis_interface
unknown_platform_type <platform_type>
end_dis_interface
I changed a setting in a dis_interface block and the WSF simulation did not change! What is wrong?
Another dis_interface block most likely is being read in AFTER the dis_interface block you edited. Keep in mind that the last command read in will overwrite your setting. To see what files have been read in (and the order in which they were read in), look at the log file (typically located under the subdirectory named “output”).
How easy is it to add the above real-time commands?
In this example, the command to run a simulation constructively is “run mysim.txt”. First, create a realtime.txt file (the filename can be of your choosing). Sample contents of a realtime.txt file:
realtime
dis_interface
exercise 1
site 25
application 44
multicast 224.2.25.55 192.168.10.32
port 3225
suppress_comm_data
maximum_track_jam_entries 10
autostart
force united_states 1
force canada 2
log_created_entities
end_dis_interface
include dis_map.txt # This file would have all of your dis enumeration mappings...
Now, type the command “run mysim.txt realtime.txt” and the constructive WSF simulation will run in real time.