No cookie for
Felix Rodriguez

DIS 7 Extensions with the Attribute PDU

DIS 7 brought a large number of improvements to the standard. Two of these improvements, however, stand out above the rest due to their flexibility in supporting all sorts of simulators and not just specific use cases. The first of this improvement is heartbeating for specific types of entities, which I covered in a past newsletter, so let’s move on to the second major general improvement: extensibility.

The Attribute PDU is a new type of message in DIS that works much differently than other PDUs. This PDU is not meant to be used alone and it contains extra information about an existing PDU. For example, say you want to add new parameters to your entities. You can now create an attribute PDU with those parameters and bundle it with your standard entity message. The DIS 7 standard also comes with tens of new record types for all sorts of new data.

Unfortunately, the actual implementation of Attribute PDUs is very confusing. You can attach this PDU at the end of an existing message for one type of effect. You can also send it separately with an identifier. Or you can even send an attribute PDU that affects multiple PDUs by itself. In order to be compliant with DIS 7, all three options need to be managed. Luckily, we do that for you. All you have to do is fill out your data and add it to your object.

Continue reading
  8447 Hits
Felix Rodriguez

Generic Attributes and Parameters in VR-Link 5.1

Among it's many other new features, VR-Link introduces generic attributes and parameters for version 5.1. Generics are a way of accessing extended information in your FOM that is not normally supported. For example, lets say your FOM, based on RPR, contains an extra attribute on entity objects called "RadarSignature." Once generics are enabled in VR-Link, all you have to do is ask for your data:

Continue reading
  4178 Hits
Felix Rodriguez

VR-Link: Not Just for C++ and C#

Now that VR-Link for C# is released, we are excited to build new simulations on top of C#. I personally find C# to be fantastic to work with, so I can't wait. But even more interesting is that VR-Link is actually built as a CLI (Common Language Runtime) library.

The CLI is an intermediate language that can be used to build applications on any other language that conforms to the CLI standard. There are many. As of this writing, Wikipedia (http://en.wikipedia.org/wiki/List_of_CLI_languages) lists 32 separate languages that can interface with a CLI library. This includes scripting tools such as Python, PHP, and Ruby, purer languages such as Eiffel, and commonly used simpler languages, such as Visual Basic! Our customers are no longer bound by language limitations and will now be able to choose the language strictly based on which one is more useful for the job. You can even mix and match as you please.

Continue reading
  9835 Hits
Felix Rodriguez

Parallel Publishing in VR-Link

VR-Link 5.1 has put a heavy emphasis on performance. The MÄK Engineers have gone through every bit of VR-Link to find hundreds of speed improvements in the already fast libraries. There comes a point, however, that most of your speed improvements are going to come with multi-threading.

VR-Link now includes multi-threading classes that allow you to update publish your DIS and HLA objects in parallel, greatly speeding up that side of the simulation. But don’t worry, we have abstracted out most of the complexity required to multi-thread, and your code does not have to increase in complexity at all.

The trick to this simplicity is that we have now created a DtPublisherContainer, a class that can tick all the publishers at the same time but can be used in a single threaded environment otherwise. For example, if your code before looked like this:

Continue reading
  5401 Hits
Felix Rodriguez

HLA Ownership Management in VR-Link 5.1

Transferring control in simulations is a complicated dance. Both the relinquishing and the receiving simulations have to agree in principal and then exchange lots of complicated transactions to make the exchange. The complexity leaves most who attempt it frustrated and hopeless.

It doesn’t have to be that way. In VR-Link 5.1, MÄK offers you a technique to make the transfer of objects pre-approved and thus easy. Each participating simulation starts by agreeing to take any objects offered and agreeing to relinquish any objects asked for. With the approval steps out of the way, only a single message is needed to take control of another simulation’s airplane, for example. Similarly, with a single message your simulation can give back control when you are finished. We’ve included examples in VR-Link to illustrate this technique. So give it a try "” it’s actually kind of fun.

Background and Rationale

Continue reading
  9077 Hits
Felix Rodriguez

VR-Link for C# loads all protocol-specific material at runtime

If you’ve been playing with some of our VR-Link for C# examples, you might have noticed something strange. We usually include one example for each networking protocol, so you get F18DIS, F18HLA13, and F18HLA1516e.

But our C# examples do not do that. There is just a single F18Sharp executable. Don’t worry, we didn’t suddenly decide to drop all our networking standards. In C#, we have slightly changed the VR-Link interface to load all the protocol-specific material at run-time instead of at compile time.

Now you don’t even need to recompile to get all your protocols. You can define which protocol you want in your run-time configuration, or even command line arguments.

Continue reading
  4887 Hits
Felix Rodriguez

"Your software has crashed for unknown reasons..."

As a software engineer, just writing that line brings my heart rate up. HLA in particular makes things a little harder because of the sheer number of exceptions that HLA throws, even for non-exceptional reasons. In this article, we will discuss two minor additions to VR-Link 5.0.1: One that helps find the error and another that helps you recover from an error gracefully.

First things first "” finding the error. Have you ever had a crash (hopefully not too many) in VR-Forces and encountered a little dialog asking you to save a memory dump? If you send that memory dump to us, we can analyze the VR-Forces source code and find the cause of that crash. This is actually a fairly simple feature that Windows provides. To make it even easier for you, however, we now have a simplified version of this in VR-Link that you can implement in your own applications.

DtMinidump miniDump("ApplicationName"); //Enable mini-dump.

Continue reading
  5950 Hits
Felix Rodriguez

How to handle disparate DIS versions

Now that VR-Link 5.0 is out and we have added support for DIS Version 7, you might have questions about compatibility between DIS versions and VR-Link. In a nutshell, if everyone is using VR-Link 5.0, there will be no compatibility problems. If you have systems not using VR-Link, or using an older version of VR-Link, then you might have some situations arise.

DIS Version 7 is not fully backwards compatible with previous versions of DIS. If you are sending DIS 7 PDUs, there is no guarantee that the other systems in your exercise will be able to read them. For this reason, by default, VR-Link 5.0 still sends DIS version 6 PDUs. This means that upgrading to VR-Link 5.0 will not suddenly make your exercise incompatible.

If you want to send DIS Version 7, you can set the global variable DtProtocolVersionToSend to 7 (this is defined in the file pdu.h). Now, you are sending DIS 7 compatible PDUs. You can also, of course, set that value to any number between 4 and 7 to send a specific version of the protocol. You can even do this at runtime using the command line if you are using our included command line interface:

DtVrlApplicationInitializer appInit(argc, argv, "VR-Link Application");
appInit.parseCmdLine();

If you are parsing the command line (or loading a VR-Link configuration from a file) simply typing "--disVersion 7" as a command line parameter will force your application to send DIS Version 7 messages.

Receiving legacy PDUs into a VR-Link 5.0 version should give you no problem at all. VR-Link has always been able to support receiving multiple protocol versions even in the same exercise. For years, we have been able to read versions 4-6 of the DIS protocol. Now, you can read versions 4-7. This is regardless of what version you are actually sending. (As an aside, this is also true in HLA where you can mix HLA 1.3 federates with HLA Evolved federates.)

There are two values that define what DIS version you can receive: DtProtocolVersionToRecvMin, and DtProtocolVersionToRecvMax. Both are also located in pdu.h. In nearly all situations you should not need to change these values, since by default they are set to the lowest and highest values that VR-Link can provide.

Those two values exist in older versions of VR-Link as well, although they are set to 4-6 instead of 4-7. If you feel up to it however, you can take an older version of VR-Link and tell it to read DIS Version 7. It will not understand new concepts, but in some cases it understands enough to be able to communicate with newer systems.

  4471 Hits
Felix Rodriguez

Keeping pace with modern programming languages

Programming languages have been evolving since the first computer was created. Early languages, including Autocode, FORTRAN, and FlowMatic, made way for many of today’s modern languages. The era of the C language introduced better structure and access to low-level system functions and devices. Then came C++, adding object-oriented programming constructs. Now we have a whole class of simple, modern, general-purpose, object-oriented programming languages, like C# (pronounced C sharp), that are gaining popularity.

VR-Link has been with you since the beginning and we plan to be with you to the end. So "“ drum roll please "“ we are excited to introduce C# support for VR-Link! Because our C# implementation of VR-Link is built as a Common Language Infrastructure (CLI) library, you can build your applications using C# or any other language that conforms to the CLI standard. There are currently 32 separate languages that are a part of the CLI standard, including Python, Ruby, and Visual Basic, as well as functional languages like F# and Lisp. (Functional languages provide an incredible amount of power when manipulating objects or groups of objects - read more about programming with F#.)

MÄK wants to make your life easier and we hope that by adding C# and other CLI-compliant languages, we have. If you have questions or requests, get in touch with us at This email address is being protected from spambots. You need JavaScript enabled to view it. (or leave us a comment below)!

  4061 Hits
Deb Fullford

An Interesting VR-Link Use Case: Aerial Refueling

The other day I was talking to a customer about an interesting use case involving VR-Link. They are using VR-Link to network two simulations together for Aerial Refueling Exercises. While DIS and VR-Link have both been around for over 20 years, this was the first time that they were used for aerial refueling.  The aircraft involved are moving at high speeds and physically connect to each other during flight. It turns out, this is pretty tricky, which I’m sure most of you have already gathered. Using VR-Link, this customer modified how the messages were sent to make sure the simulation was fast enough to provide adequate training. If you are interested in seeing this in person, the Air National Guard will be highlighting this in their booth at I/ITSEC this year.

  5113 Hits
Matt Figueroa

VR-Link Adds New Feature to Prevent Mismatched RTI Versions

When working in an environment with multiple compiler versions of our MÄK RTI installed, it can sometimes be tricky to remember which RTI you have your environment variable pointing to. With the release of VR-Link 4.0.7, we introduced a new "DtVlRtiMismatchException." An exception in C++ is a way to handle certain outlying situations, like runtime errors, which can lead to program crashes. This new DtVlRtiMismatchException is an exception that VR-Link throws if it finds that the RTI is an incompatible compiler version. When the exception is thrown, a catch is needed to handle it. A catch statement is some C++ code that triggers when a certain exception is caught. This DtVlRtiMismatch-Exception is thrown when making an exercise connection, so adding a catch after creating a connection is a great way to avoid, what are often, vague issues caused by a mismatched RTI compiler version. (continued...)

  4825 Hits
Douglas Wood

Speed Up VR-Link Performance for HLA 1516 and HLA Evolved

Each HLA object must have an object name that is unique throughout the federation execution. When an object is registered, the federate can provide a name or let the RTI supply an object name. In the HLA 1.3 specification, when the federate supplies the name, it is up to the federate to make sure that the name is unique. If it isn’t, the RTI throws an exception. The HLA 1516 specification lets you reserve names to ensure that they are unique.

By default, the VR-Link publishers perform name reservation and object reservation at the same time - when the publisher is created. The name reservation process requires a round trip handshake between the local RTI component (LRC) and the rtiexec. Therefore, performing it just before an object is registered can delay the object registration process. If the federate is simulating a limited number of objects that are created at start up, this overhead is negligible. However, if the federate is creating many 100s of objects or if an object is being created in a time critical fashion (say a missile fly out), the delay caused by name reservation can become significant. One way to avoid the name reservation delay is to perform the name reservations ahead of time before the objects are registered. VR-Link can do this.

To reserve names in advance, your VR-Link application needs to make name reservation calls. If the calls are performed through the exercise connection, the results are cached. When an object publisher is created, it first checks to see if the name is already reserved. If so, the name reservation call is skipped.

Continue reading
  5596 Hits
Felix Rodriguez

Interoperable, Protocol Independent, Easy to Use: VR-Link Stands the Test of Time

More than 20 years ago, VT MÄK stepped into the Modeling and Simulation community and introduced our flagship simulation networking software, VR-Link. Since then, MÄK has remained focused on both our dedication to interoperability and the needs of our customers. We’ve been active participants in the development of industry standards and protocols through the Simulation Interoperability Standards Organization (SISO) and have built our products to ensure our customers can use the protocol of their choice. This has consistently made VR-Link the top HLA-DIS networking toolkit on the market and VT MÄK the top choice for distributed simulation software.

Continuing the MÄK tradition of listening, learning, and evolving, we’ve recently added even more capabilities to meet the growing needs of VR-Link users. Here is some of what you’ll find in VR-Link 5.1:

  • New C# library of objects and interactions "“ While a lot of our customers use C++ to build DIS or HLA compliant applications, many new projects are started using C# "” a simple, modern, and object-oriented programming language. VR-Link now empowers customers to use a library of C# objects and interactions with our VR-Link protocol-independent API. (Learn how MÄK is keeping pace with modern programming languages like C#!)
  • Continued focus on performance "“ Performance is a top priority at MÄK. We’ve put a lot of effort in VR-Link to ensure our customers can take advantage of multithreaded publisher lists; this enables users to tick all publishers with a single call, allowing them to update as fast as possible.
  • Easier FOM extensions "“ Enjoy a simpler way to access FOM extensions. If you have a FOM where one or more new attributes have been added, you can now easily access the attribute without writing any new code at all.
  • API Improvements "“ We have significantly simplified our API for transferring ownership in HLA, as well as for configuring dead reckoners and smoothers. This will greatly speed up development for our VR-Link customers. 
  • Compliant with RPR FOM 2.0, Draft 20 "“ You can rely on VR-Link to remain up-to-date with major standards. VR-Link now supports the latest draft of the soon-to-be-finalized RPR FOM 2.0 standard, defining HLA classes, attributes, and parameters that are appropriate for real-time, platform-level simulations.

Stay tuned for more blog posts highlighting VR-Link newest capabilities!! And as always, reach out to us at This email address is being protected from spambots. You need JavaScript enabled to view it. (or leave a comment below) to get more info!

  4319 Hits
Jim Kogler

MÄK Product Release: MÄK RTI 4.4.1

The most recent release of MÄK RTI 4.4.1 is a minor maintenance release that makes several minor changes.

New Platform Support: Microsoft Visual C++ 12.0 and Red Hat Enterprise Linux 7 have been added. For both of these platforms, only 64 bit libraries are supported. MÄK products will only support 64 bit libraries for all new platforms. The MÄK RTI has dropped support for VC7, VC9, Red Hat Enterprise 4, and SUSE 11.

If you are a customer under support and require these platforms, please contact This email address is being protected from spambots. You need JavaScript enabled to view it. for more information.

Continue reading
  7229 Hits
Jim Kogler

MÄK Product Release: VR-Link 5.1.3

VR-Link 5.1.3, a maintenance release with several minor changes, is out! Here are some of the most notable changes:

Platform support changes: We have added support for Red Hat Enterprise Linux 7 (64 bit only). We have also ended support for Red Hat Enterprise Linux 4, SUSE 11, and Windows MS VC 7.1 and 9.0. MÄK is committed to supporting the platforms our customers care most about; if you require discontinued platforms, contact MÄK support.

VR-Link Code Generator: We continue to improve the VR-Link code generator by making the output more intuitive and easier to read. The code generator now generates VR-Link internal classes as much as possible, helping to produce a highly consistent API. The code generator will also generate an HLA Evolved project without providing the standard MIM.

Continue reading
  6851 Hits
Aaron Dubois

RPR FOM 2 is here!

After more than 15 years and 21 different drafts, RPR FOM 2 is finally a SISO standard! It’s been a long road with periods of intense activity and years with little progress, but it is here. The RPR FOM is an incredibly important standard in our industry. It embodies the most widely used object model in our community. It was originally designed to allow the concepts of DIS to be used in HLA federations. Now with RPR FOM 2, there is a single official standard that is supported by all the flavors of HLA and is consistent with DIS version 6. Having this standard provides a clear way for our customers to maximize their simulation investments — with minimal incremental cost, simulations built for a single purpose can be connected to other simulators to form larger and more valuable federations.

Continue reading
  14132 Hits