In this section we have put together a number of Frequently Asked Questions (FAQ's) that can help you with some of your questions regarding the following subjects:

Technical Questions

Software Drivers

Software Applications

Hardware - UNET, Discretes. PCIe Cards

MIL-STD-1553

LabView & LabWindows

Website Issues

Technical Questions

Here is a checklist of questions for a customer reporting a problem. Answering these questions will provide
technical support with as much information as possible up front, and enable us to provide a quick and correct
solution. The more information available from you makes it easier to try to reproduce the problem, or to
understand what is causing the problem.
1. Give exact card name as found on the white strip on the back of the card. Also exact names of modules on
card, if applicable. In addition, provide the board and module serial numbers.
2. Verify the DIP switch and jumper settings, if any.
3. What operating system is running on the machine? 32bit or 64bit ?
4. What software is installed (full name)? What version? (Please see the file RevisionHistory.txt or
readme.rev, in the installation folder, or right click on the DLL name in Windows Explorer and select the
Properties/Version or Properties/Details tab to see the revision number.)
5. Verify that the customer did all of the steps to properly install the card under the given operating system,
as explained in file "Installation Instructions.pdf" (formerly named readme.pdf):
• Hardware installation:
o Verify that the card appears in the Device Manager, or perhaps an unknown PCI Device, and
install or update the driver. The latest released hardware drivers are available for download
from www.mil-1553.com/kernel-drivers .
• Software installation:
o Run ExcConfig to assign a device number to the card
o Run one of the demo programs to verify that the card is working. If the demo
program does not run successfully, mark down the name of the demo program
that was run, the function call that failed, and what error message was returned
(error code number or error string [esomething]).
6. If the card is not working, then run ExcConfig (Start | Programs | Excalibur | ExcConfig) and check the
Debug checkbox, click on Save, close, and reboot the system. Then run one of the demo programs, and
search for the file excalbr.log. It may be in the Windows folder or the Windows System subfolder. Email us
this log file. For Windows 2000/XP and newer, also email us the file frontdesk.log or ExcFrontDesk.log.
7. Make screen captures of all installed Excalibur devices: Open the Device Manager (Select Start | Settings |
Control Panel | System | Hardware | Device Manager). Click on the plus sign (+) to show all the Excalibur
devices installed.
• Press Alt+PrintScreen to capture the screen. Paste the screen capture into Microsoft Word or save as
a graphic in any graphics program. Double-click each Excalibur device to display its properties, and
take screen captures of each one.
• Now click on the Details tab. In the drop down box, select “Device Instance Id” or “Hardware Ids”.
Press Alt+PrintScreen to capture the screen. Paste the screen capture into Microsoft Word or save as
a graphic in any graphics program.
• These screen captures enable Technical Support to determine whether the hardware is set up
properly.
Excalibur cards are listed under a heading similar to Excalibur PCI Cards or Excalibur PCMCIA Cards.
Note that each Excalibur device should have a gray colored diamond shape next to it (Win XP and earlier). For
Win7/8/10, there is a display icon with perhaps a small question mark (?) next to the installed Excalibur card.
This is an acceptable phenomenon.
If any Excalibur device has a large yellow question mark (?) or exclamation mark (!), then the driver did not
install properly.
If there is a "PCI Device" marked with a yellow question mark (?) or exclamation mark (!), then you probably
need to reinstall the driver for the card.
8. What is the revision number of the hardware drivers ? From the Device Manager, for the Excalibur listed
devices, click on one of the cards listed, and click on the Driver tab. Then click on the button “Driver Details”.
For each file listed in this window, send us the version number of file as listed in the lower section of the
screen.
The hardware driver files are found at C:\Windows\System32 and C:\Windows\System32\drivers. The file
names are:
• For 64bit Windows: excx64.sys and frontdesk.dll
• For 32bit Windows: exc2000.sys and frontdesk.dll
• For Windows NT: excalbr.sys
• For Windows 9x/ME: excalbr.vxd
Press Alt-ENTER (or right click, Properties | Version) to display the properties screen, select the Version or
Details tab to extract the version information, and add this to the email you send us.
9. Run the Showhex Memory Display utility. Select "Start | Programs | Excalibur | Showhex Memory Display
Utility". [ The current revision of Showhex is available for download from www.mil-1553.com/applications . ]
Select the device number as assigned in ExcConfig, and a module number. Then, select (a) "File | Save All
Modules to File" or (b) "File | Save to File". If (b), then do this for each module on the card (for 4000PCI card,
also do this for module 4, global register bank). Email us these files.
The Showhex files are good for the case where the card does not work, and also for the case where the card
works but has problems. It gives us a picture of the memory on the card and the messages as they were set
up by the user.
Note that the memory on all of our card/modules is NVRAM. This means that when you turn the machine off,
all the data that was in memory is erased. When the machine is turned on, the card/module performs a
reset, also wiping the memory clean. A Showhex dump run immediately after power on is also helpful, to
show if the card is alive at that point.
10. For Exalt problems, note the Exalt version number; send the .pak (package) file, the .rpf (replay) file, and
the .scn (scenario) files (if there are any in use).
11. Please send a sketch of the system – computers, cabling/wiring, couplers, Excalibur cards, etc.
If your system is 1553 protocol communications, please see our “1553 Bus Connections diagram.pdf”
document on our Help Desk webpage at URL www.mil-1553.com/help-desk.

Here is a checklist of questions for a customer reporting a problem. Answering these questions will provide
technical support with as much information as possible up front, and enable us to provide a quick and correct
solution. The more information available from you makes it easier to try to reproduce the problem, or to
understand what is causing the problem.

1. Give exact card name as found on the white strip on the back of the card. Also exact names of modules on
card, if applicable. In addition, provide the board and module serial numbers.

2. Verify the DIP switch and jumper settings, if any.

3. What operating system is running on the machine?

4. What software is installed (full name)? What version? (Please see the file RevisionHistory.txt or readme.rev,
in the installation folder, or right click on the DLL name in Explorer and select the Properties/Version tab to see
the revision number.)

5. Verify that the customer did all of the steps to properly install the card under the given operating system, as
explained in file readme.pdf:
   • Hardware installation:
      o for WinXP family, follow the steps for New Hardware Wizard
      o for Win9x family, open the Control Panel | Add New Hardware, etc
   • Software installation:
      o Run ExcConfig to assign a device number to the card
      o Run one of the demo programs to verify that the card is working. If the demo
       program does not run successfully, mark down the name of the demo program
       that was run, the function call that failed, and what error message was returned
       (error code number or error string [esomething]).

6. If the card is not working, then run ExcConfig (Start | Programs | Excalibur | ExcConfig) and check the Debug
checkbox, click on Save, close, and reboot the system. Then run one of the demo programs, and search for the
file excalbr.log. It may be in the windows folder or the windows system subfolder. Email us this log file. For
Windows 2000/XP and newer, also email us the file frontdesk.log or ExcFrontDesk.log.

7. Make screen captures of all installed Excalibur devices: Select Start | Settings | Control Panel | System |
Hardware | Device Manager. Click on the plus sign (+) to show all the Excalibur devices installed.

Press Alt+PrintScreen to capture the screen. Paste the screen capture into Microsoft Word or save as a graphic
in any graphics program. Double-click each Excalibur device to display its properties, and take screen captures of each one.

Now click on the Details tab. In the drop down box, select “Device Instance Id” or “Hardware Ids”. Press
Alt+PrintScreen to capture the screen. Paste the screen capture into Microsoft Word or save as a graphic in any graphics program.

These screen captures enable Technical Support to determine whether the hardware is set up properly.
Note that each Excalibur device should have a gray colored diamond shape next to it. If any Excalibur device has
a yellow question mark (?) or exclamation mark (!), then the driver did not install properly.
If there is a "PCI Device" marked with a yellow question mark (?) or exclamation mark (!), then you probably
need to reinstall the driver for the card.
In Windows 7, there may be a small question mark (?) next to the installed Excalibur card, listed under the
heading Excalibur Cards. This is an acceptable phenomenon.

8. What is the revision number of the hardware drivers ? From the Device Manager, for the Excalibur listed
devices, click on one of the cards listed, and click on the Driver tab. Then click on the button “Driver Details”. For
each file listed in this window, send us the version number of file as listed in the lower section of the screen.
OR: Search for the files exc2000.sys & frontdesk.dll (for Win2000/XP/Vista/7/8) [ or excalbr.vxd (for Win9x &
ME) or excalbr.sys (for WinNT) ]. Press Alt-ENTER (or right click, Properties|Version) to display the properties
screen, select the Version tab to extract the version information, and add this to the email you send us.

9. Run the Showhex Memory Display utility. Select "Start | Programs | Excalibur | Showhex Memory Display Utility".

[ The current revision of Showhex is available for download from www.mil-1553.com/applications  . ]

Select the device number as assigned in ExcConfig, and a module number. Then, select (a) "File | Save All
Modules to File" or (b) "File | Save to File". If (b), then do this for each module on the card (for 4000PCI card,
also do this for module 4, global register bank). Email us these files.
The Showhex files are good for the case where the card does not work, and also for the case where the card
works but has problems. It gives us a picture of the memory on the card and the messages as they were set up by the user.

10. For Exalt problems, note the Exalt version number; send the .pak (package) file, the .rpf (replay) file, and the
.scn (scenario) files (if there are any in use).

11. Please send a sketch of the system – computers, cabling/wiring, couplers, Excalibur cards, etc. If your system
is 1553 protocol communications, please see our “1553 Bus Connections diagram.pdf” document on our Help
Desk webpage at URL www.mil-1553.com/help-desk or our tutorial www.1553couplers.com/tutorial-coupler .

Software Drivers

Please see our FAQ titled “Driver Support for Various Windows Operating
Systems - 64bit Windows and running a 32bit EXE”, at URL http://www.mil1553.com/faqs.
This document spells out the necessary changes for the hardware driver (at
the Device Manager level), and for the software drivers.

(a) Our software API supports all current modules of the same type. So, the same software tools
installation is applicable for the M4K and the M8K modules on their respective cards. M4K modules
sit on 2000 & 4000 family cards and on the first generation UNET; M8K modules sit on 8000 family
cards and on the UNET2.
(b) There is a base card dll (called Exc4000Ms.dll) which contains API functions for all the base card
families: 2000, 4000, 8000, UNET, UNET2.
There is a module level dll (called ExcProtocolMs.dll, where the word protocol is replaced with the
actual protocol name of the module). In addition, there are lower level dlls (ExcUnetMs.dll,
ftd2xx.dll, ftd3xx.dll) with calls that are used for extracting packets from the cards/modules.
A full set of dlls is required for use with all cards (even for non-UNET cards). After installing your
software tools, the set of dlls is available at folder
C:\Excalibur\Protocol Software Tools\Source\lib\excMSVisual”. Here you will find subfolders
Win32/x64 and, for each of these, Debug/Release. Select the folder that matches your compiler
settings, and take the full set of dlls.
For 32bit Windows, copy the dlls to the folder of your EXE, or to C:\Windows\System32.
For 64bit Windows, copy the dlls to the folder of your EXE, or to C:\Windows\SysWOW64. You can
use either the 32bit set of dlls, libs & exes, or the 64bit set.
The software tools package comes with folders Manuals which contains hardware & software
manuals, and Source which contains source code for the dll, compiled dlls & libs for 32bit/64bit
(subfolders DllProtocolSource, lib), and demo programs (source code + EXEs) compiled for 32bit (in
folder Source\demos_protocol\bin) and for 64bit (in folder Source\demos_protocol\bin64).
The API for the base card level functions is found starting at folder “C:\Excalibur\4000PCI Software
Tools”.

Let us examine the times of the messages.
Each message (label) is one 32-bit word.
In addition, we have 4 bit-times between messages, so we have a total of 36 bit-times
for each label.
At low speed, each bit time is 80 usec (microsec), so the one word takes 80*36 = 2880
usec to be transmitted.
Using data rate mode, with data rate of 125 bit-times, this means that we want to
transmit the word every 80*125 = 10,000 usec.

1. The algorithm used for Data Rate mode is as follows:
• set up all the blocks & their periodicity
• transmit the first block
• then check if the period of first block has expired and needs to be
retransmitted
• if NOT, transmit next block
• then check if the period of every block from the first block on, has expired, one
at a time, and needs to be retransmitted
• if NOT, transmit the next block
Therefore, if the periods were not set up properly, it is possible that some block(s)
will be transmitted multiple times, and some blocks will not be transmitted at all. So,
after transmitting each block we check to see if the period of every block, that has so
far been transmitted, has expired. This will happen after 10,000 usec, which is eaten
up by transmitting 4 labels (each of size 2880 usec). So, at this point, instead of
transmitting label #5, we go back & transmit label #1, then label #2, then label #3,
then label #4, and then back again to label #1, ...

So, we will never transmit label #5.

If you use a larger data rate, of 250 bit-times, this translates to 20,000 usec, which
gives enough time for all 5 labels to be transmitted, then wait about 5600 usec, and
go back to transmitting the labels in sequence again. Or you could use a smaller rate,
say 180 or perhaps 200, which will cover the 14,400 usec total needed by the five
labels.

2. Alternatively, you can use Interblock mode. Its algorithm is:
• set up all blocks & their interblock gaptimes (how many bittimes to wait
between transmitting this block and the next block)
• transmit each block in sequence, waiting the appropriate time in between
transmission of one block & the next one
• NOTE that all blocks will be transmitted ONCE, and then we start a new round
of transmitting all the blocks ONCE, etc.

Install the software tools for the module. Our current software tools release contains:

API Source code and DLLs:
• a single set of source code files for the API functions – found at folders
"C:\Excalibur\ProductName Software Tools\Source\DllProductNameSource” and “include”
• one set of DLLs for use with 32bit applications - found at folder structure
"C:\Excalibur\ProductName Software Tools\Source\lib\excMSVisual\Win32” (with
subfolders Debug & Release)
• one set of DLLs for use with 64bit applications - found at folder structure
"C:\Excalibur\ProductName Software Tools\Source\lib\excMSVisual\x64” (with subfolders
Debug & Release)

Demo Programssource code and EXEs:
• a single set of source code for demo programs- found at folder structure
"C:\Excalibur\ProductName Software Tools\Source\demos_ProductName”, separate folder
for each demo program
• one set of demo program EXEs compiled for 32bits- found at folder structure
"C:\Excalibur\ProductName Software Tools\Source\demos_ProductName\bin”
• one set of demo program EXEs compiled for 64bits- found at folder structure
"C:\Excalibur\ProductName Software Tools\Source\demos_ProductName\bin64

NOTE: You need to take a full set of DLLs as found in the appropriate subfolder (under lib) for your
compiler setting: [Win32 or x64], and [Debug or Release]. Copy the full set of DLLs to the folder
where your EXE sits, or to C:\Windows\SysWOW64 (for 64bit Windows).
The DLLs include: a module level DLL (ExcProductMs.dll), a base-board dll (Exc4000Ms.dll), and
other dlls for lower-level functions to access the registers on the module.
For 32bit applications, the DLL set contains an additional 32bit dll named frontdesk.dll.

The 8000PCIe card is our latest release of the evolution of the 4000PCI[e] card family. That is, it is
basically a 4000PCIe that supports up to 8 modules.
The M4K modules that are supported on the 4000PCI[e] family cards, have evolved into M8K
modules that are supported on the 8000PCIe family cards. The software for the M4K modules has
evolved into supporting the corresponding M8K modules.
Hence, use the latest software release for M4KProductName for use on the M8KProductName
module.
For example, for the module code Fx, M8K1553Px module, the software installation is available for
free download on our website, at URL https://www.mil-1553.com/m4k1553px, filename
m4k1553pcipx-st-win32-win64.zip.
In addition, you need the appropriate hardware driver so that the Device Manager will be able
recognize the card. This driver is available at URL https://www.mil-1553.com/kernel-drivers, file hwpci-winx64.zip for 64bit Windows (or hw-pci-w2k.zip for 32bit Windows). If your machine is 64bit
Windows 10 with Secure Boot, then you need the hardware driver filename hw-pci-winx64-SecureBoot-Win10.zip .

We first suggest that you install (on the target machine) the latest released
software tools package for each of your module types. Then, you will need a new
set of DLLs that match your compiler. You will then copy the set of DLLs to the
same folder where your EXE sits (or where it expects the DLLs), and run your EXE.

Where are the DLLs found ?
For Borland compiled EXEs: If we have support for Borland DLLs, the set can be
found at “C:\Excalibur\[protocol] Software Tools\Source\lib\excBorland”. Make
sure to the take the full set of DLLs.

For Microsoft compiled EXEs: The set of DLLs can be found at
C:\Excalibur\[protocol] Software Tools\Source\lib\excMSVisual”. In this folder,
you will find two subfolders, Win32 (for 32bit DLLs), and x64 (for 64bit DLLs). In
each subfolder, you will find two subfolders: Debug and Release. Select the DLLs
from the desired subfolder and copy them to your target folder.

NOTE: Please also see the FAQ titled “Driver - 64bit Windows and running a 32bit EXE.pdf

We have seen this problem. It is important to verify that the compiler options are set
the same on the 64bit Windows machine as on the 32bit Windows machine. The
default options may be different, and very critical for successful compilation & running.

For example, if a structure has an odd number of bytes or words, the compiler may
default to a data alignment that adds extra bytes/words to the structure. This might
not be compatible with our DLL and its compilation options.

For instance, here are some changes that you should make to your Borland C++
Builder (5) Project, in order to work well with our DLLs.

Project > Options > Advanced Compiler:
- Data Alignment should be BYTE (not Quad word)
- Calling convention should be STANDARD CALL (not C)
Note that the size of an int may be different across compilers and operating systems

1. Concerning software tools packages:
We combined software for similar cards into a single software package. For
instance, "1553Px Software Tools" now covers M4K1553Px[S] module,
M8K1553Px[S] module, UNET/Px, 1553Px module on UNET2; and older
cards EXC-1553PCMCIA/Px and /EP. [ Similarly for 429RTx modules & cards. ]
In addition, we made a single combined package for 32bit and 64bit
compiled drivers (DLLs, demo programs). The package comes with a single
set of source code files for the DLLs, a single set of source code demo
programs, 32bit compiled DLLs and demo programs, and native 64bit
compiled DLLs and demo programs. We supply VS2008 project solutions
and project files for the different components of the package.
At the end of the software tools installation, we also install the associated
GUI package for this protocol. Note that the GUI packages now come
packaged with all the necessary DLLs. So, it is not necessary to install
software tools prior to running the GUI packages.
2. Concerning LabVIEW and LabWindows tools packages:
We have combined support for multiple cards using one set of tools:
LabVIEW VIs and LabWindows CVIs for various (not yet for all) cards
running the same protocol (just like the combined software tools).
Note that the newer LabVIEW and LabWindows packages come packaged
with all the necessary DLLs. So, it is not necessary to install software tools
prior to running the VI or CVI packages.
3. All Excalibur software is now installed to a folder structure starting at
C:\Excalibur. Locate the folder for your protocol; the protocol name is
generally part of the folder name. Subfolders include Manuals & Source.
Source includes subfolders DLLsource (.c), include (.h), lib (.DLLs and .LIBs),
demos_xxx (which includes folders for each demo program, and folder bin
for 32bit compiled EXEs, folder bin64 for 64bit compiled EXEs).
Utilities programs (e.g., ExcConfig), Showhex, ExcLaunchPad) are installed
to folders at C:\Excalibur\Utilities. There are also additional folders here for UNET utilities and USB drivers.
4. Please see file ReadMeFirst_XXX.txt in your root folder for more information on the folder structure.

We used to place a copy of all of Excalibur DLLs into WINSYSDIR, the Windows system folder.

One day, a number of years ago, we got "burned" because another company did
the same thing and we had a name clash. As a result, we purposely decided to
change this policy. We renamed all of our DLLs to a more consistent schema (to
reduce the possibility of a name clash), and stopped copying to WINSYSDIR.

We decided to place the DLLs in the target installation folders ONLY (under folder C:\Excalibur).
The customer will find the DLLs and copy them to wherever he needs to find them:
• in the installation folder,
• in the folder where the EXE sits,
• just be available automatically (i.e., place it in WINSYSDIR or C:\Windows\SysWOW64),
• or somewhere else.

You can run multiple applications simultaneously for any specific protocol,
using a single set of DLLs (for that protocol).

For example, for multiple 1553Px modules, you can run demo_bc_general
on module 0, demo_rt_general on module 1, demo_mon on module 2,
demo_loopback on module 3 - all at the same time, simultaneously.

You can run only one application on a specific module at a time.

You can run different applications (or even the same application) on
different modules at the same time. For example, you can run multiple
copies of MerlinPlus or Mystic on different cards (one copy can run on all the modules of a single card).

1. Pin to pin assignments are compatible.
2. The registers & memory maps are different, due to the additional (and larger)
registers for the additional features of the SerialPlus module; as listed in the User's Manual.
3. The latest software covers both the Serial module (all versions) and the SerialPlus
modules. It recognizes which module you have, and applies any API function call to
the appropriate register.
Many functions are handled internally in two flavors: 8bit for Serial, 16bit for
SerialPlus. Despite the different memory maps, the two internal implementations
(8bit and 16bit) are synchronized.
4. IF you use the latest software release (for PCI or for VME/VXI), then there is no
need to change your software application.
5. Here is a list of software API additions to support features only available on the
SerialPlus modules:
ClearRcvCountTrigFlag_SER
ClearRcvPatternTrigFlag_SER
SetModuleTimetagResolution_SER
SetRcvCountTrigger_SER
SetRcvPatternTrigger_SER
SetTransmitGap_SER

The software drivers API handles all the different models of the modules.
Assuming that you use current software tools, there is no problem mixing &
matching different generation modules on the same card.

Of course, newer features (and functions) that were added in a later module /
later firmware or hardware version may not be available on the older module(s).

For the 1553Px module, there are three generations of the M4K module:
- Px first generation (using an AMD chip)
- PxII second generation (using an Intel chip) - hence the II in the module name
- PxIII third generation (using a Nios chip)

For the 429RTx module, there are two generations of the M4K module:
- RTx first generation (using a Motorola chip)
- RTx second generation (using a Nios chip)

  1. Showhex Memory Display Utility: Select menu item File > Save All Modules to
    File, and save the file as a .txt file. Please send us this file. It contains the
    contents of memory at the moment you saved the contents.
  2. new demo_information program: We added / are adding a new demo
    program called demo_information_xxxx to each software tools release.
    It is incorporated into the installation software for the specific card, like all other
    demo programs. This demo program prints to a file the types of all modules on
    the card, and for each module of the specific protocol you are running, performs
    a call to Init_Module_xxx, to initialize the module. For each module that passes
    the initialization function, the program will print the module information (e.g.,
    firmware revision, hardware revision) to a file.
  3. ExcLaunchPad: A general GUI program that gives information about each card
    in your machine, and the modules on the card(s).

Please see our FAQ titled “Driver Support for Various Windows Operating
Systems - 64bit Windows and running a 32bit EXE”, at URL http://www.mil1553.com/faqs .

This document spells out the necessary changes for the hardware driver (at
the Device Manager level), and for the software drivers.

All Excalibur cards require (a) hardware installation disk for the given operating system (32bit or 64bit), and
(b) software tools installation for the card/module.
    32bit Windows support: All of the products that we sell today have 32bit Windows software tools
       drivers. All products have been tested under 32bit Windows XP, 7, etc. This applies to 4000PCI Series
       boards as well as to PCMCIA cards. For these products, the filename on the webpage for the product
       indicates this using a “-win” in the file name.
    64bit Windows support: Most of the products that we sell today have native 64bit Windows
       software tools drivers. For these products, the filename on the webpage for the product indicates
       this using a “winx64” in the file name. [ In general, Legacy products are not supported under 64bit Windows. ]
    64bit Windows support for 32bit software tools: The 32bit software tools for our current cards and
       modules will also run under 64bit Windows. Hence, using current 32bit DLLs and a 32bit application
       EXE, will run under 64bit Windows.

Hardware installation (a) is quite straightforward. When you install the card in the machine, the Add New
Hardware Wizard will ask for a disk. You need to supply the hardware installation. The necessary files can be
found at URL http://www.mil-1553.com/kernel-drivers .

File names will be hw-pci-osname.zip for PCI cards, and hw-pcmcia-osname.zip for PCMCIA cards. The
osname will be w2k for 32bit Windows (all flavors), and winx64 for 64bit flavors. For example, hw-pciw2k.zip and hw-pci-winx64.zip.

NOTE: If the card was not properly installed, then you might see a device listed in the Device Manager with a
yellow question mark ("?") icon, perhaps called "PCI Device". Right click and select Update Driver, or Install
Driver, and install the necessary driver from the appropriate hardware installation disc

In Windows 7, if the card name is listed under Excalibur PCI Cards, and there is a small question mark on the
icon, then this is OK. The card is properly recognized.

Software tools installation for the card/module (b):
Start at URL http://www.mil-1553.com/4000-family to download software tools for the M4K family of
modules for EXC-4000PCI cards. Click on the name of appropriate module to get to the webpage containing
all the installation packages available for free download for that product. Please also check URL
http://www.mil-1553.com/applications  for any applications programs that may pertain to your module. If
your card is not of the M4K family, please navigate the list on the left side of the screen (under the heading
Downloads) to find your card and the list of available software downloads.

You have three options for software installation:
Option (b-1) - For 32bit Windows, you install 32bit software tools (file name on the webpage will be
product-st-win.zip). You can then run your compiled 32bit application, either from its own folder (and it will
access the DLLs from the Windows\System32 folder), or from the folder where we installed the software
tools.

Option (b-2) - Running 64bit application under 64bit Windows: For 64bit Windows, you can install native
64bit software tools (file name on the webpage will be product-st-winx64.zip). You can then run your
compiled native 64bit application, either from its own folder (and it will access the DLLs from the
Windows\System32 folder), or from the folder where we installed the software tools.

Option (b-3) - Running 32bit application under 64bit Windows: In addition, if you want to run a 32bit
application under 64bit Windows, you will need to create a folder containing the 32bit EXE, the necessary
32bit DLLs (e.g., Exc429RTxMs.dll and Exc4000Ms.dll), and the additional 32bit kernel level file frontdesk.dll
(available within the hw-pci-w2k.zip file). Depending on when we last released the software package, this
file may or may not be automatically installed to the folders excBorland and excMSVisual.
If your application opens the DLLs from a different folder, then place the 32bit frontdesk.dll in folder
C:\Windows\SysWOW64.

a) The 64-bit version of Frontdesk.dll is automatically installed (to c:\windows\system32) when you
install the 64-bit version of the Excalibur (kernel) device driver.

b) No.

c) Not the 64-bit version of Frontdesk.dll. But see the next question!

d) YES. But you only need the copy of 32-bit frontdesk.dll when you run your application under 64-
bit Windows. The 32-bit version of Frontdesk.dll should be placed in the same directory as the 32-bit
application (.exe) directory.

e) It is bundled with the 32-bit Excalibur Software Tools (kernel) device driver. It can be found at
http://www.mil-1553.com/kernel-drivers , filename hw-pci-w2k.zip.

f) Yes. In older versions of various Excalibur Software Tools, there was a problem that prevented
frontdesk.dll from being loaded for users' Unicode applications, but this bug was fixed a few years
ago.

We need to check a number of things:
    Device Manager, card is listed properly; that is, the hardware driver was installed
       from the hardware installation disk
    Check that Showhex sees the card, and in bank 4 it sees the installed modules
       (Start > Programs > Excalibur > Showhex)
    If card is PCIe, verify that you have connected the SATA power cable to the
       power supply; otherwise, the modules will not be recognized, since they are not
       getting enough power
    Note that the default device number for the card is 25; use ExcConfig to assign a
       different (additional) device number to the card, e.g., number 0
    Verify the device number that the application expects to use; perhaps the
       application expects device number 0, or some other number, and it has not yet
       been assigned in ExcConfig
    If you are running a 32bit application on 64bit Windows, verify that the 32bit
       frontdesk.dll is in the EXE folder along with the necessary 32bit DLLs

Additional FAQ to see: “Driver Support for Various Windows Operating Systems - 64bit
Windows and running a 32bit EXE” at URL http://www.mil-1553.com/faqs  .

Yes, all of our current products are supported under Windows operating systems,
including Windows 10, Windows 8, Windows 7.

Hardware drivers – Use the same ones as for Windows XP.

Software drivers – Use the same ones as for Windows XP.

Please see our FAQ titled “Where can I find Software drivers on this website” at
www.mil-1553.com/faqs , to determine where the drivers are found.

Please see our FAQ titled “Driver Support for Various Windows Operating Systems -
64bit Windows and running a 32bit EXE”, available for download in our FAQs section of
our website, at www.mil-1553.com/faqs .
This document explains which hardware driver & which software driver combination to
install for use on your current Windows (32bit and 64bit).

Before working with EXC-4000VME/VXI boards, you must verify that there is enough
memory (user window size) on the VME/VXI machine for the board (8 MB). If there is
not enough memory, the board may not work properly.

Verifying User Window Size for Windows NT/2000/XP/Vista/7/8

1. Install NI-VXI_VISA Tools for PCI Based MXI-2 for Windows NT/2000/XP/Vista/7/8
2. Select Start | Programs | National Instruments | Measurements & Automation.
The Measurements & Automation Explorer main screen is displayed.
3. Under Configuration, double-click Devices and Interfaces. All devices and
interfaces are displayed.
4. Right-click on VXI Systems 0 (PCI-MXI-2), and select Hardware Configuration. The
Settings for PCI-MXI-2 dialog box is displayed.
5. Click the PCI tab.
6. In the User window size field, select 8 MB.
7. Click OK.
8. Reboot your Computer.

The default installation folder is “C:\ Excalibur\ProductName Software Tools” (older installations may place the files
in “C:\Program Files\Excalibur\ProductName Software Tools”).

The root folder contains all source code files (*.c, *.h) used in building the Windows DLL, including:
   • file proto_xxx.h contains the prototypes for all API functions
   • file flags_xxx.h contains flags used in the software tools
   • file errors_xxx.h contains error codes (function return values) used in the software tools
   • file RevisionHistory.txt contains a listing of the changes made to the software package, by revision number
(for older product releases, this file was named readme.rev)

Folder DemoSource contains source code of demo programs – programs that demonstrate the use of some of the
functions of the API. The name of the program gives a hint as to what it does: demo_xxx.c where “xxx” is the
descriptive name. There is usually a comment at the top of the source code describing what the program actually
does.

Folder excMSVisual (or folder bin) contains a project workspace (.dsw for VS 6) or solution (.sln for VS 2008) for the
DLL, the resultant DLL & LIB files; and project workspaces or solutions for some of the demo programs, and resultant
EXEs. The project workspaces are compiled using Microsoft Visual C++ 6; the solutions are compiled using Microsoft
Visual Studio 2008.

Folder excBorland contains a project workspace (.ide) for the DLL, the resultant DLL & LIB files, and resultant EXEs;
and project workspaces for some of the demo programs. These are compiled using Borland C++ 5. For newer
products, this folder may not exist. For 64bits, we do not supply a Borland compiled DLL.

Folder Manuals (newer installation packages) contains the manuals (software & hardware) for this card & module.

Folder Utilities (newer installation packages) contains various utility programs available for the card, including
ExcConfig and Showhex.

Older installation packages: Instead of the Utilities folder, there may be two additional files in the installation:
   • ExcConfig – Excalibur Configuration utility, which is used to assign a device number to your Excalibur board,
for use in all applications (as a parameter to function Init_Module_xxx).
   • Showhex – Memory Display Utility, which displays the module / board / card memory in hexadecimal.

Shortcuts to the demo programs are found at: Start | Programs | Excalibur | ProductName.

GUI programs: There may be an additional folder with a GUI program for this product.

1. For Windows 7: We have seen this error message when the operating system is not up to
date.
The solution is to install *all* Windows updates for this version of the operating system (64bit
Windows 7). In our experience, once Windows performs all of the system updates, either (a)
the driver is automatically recognized by the Device Manager, or (b) you should be able to
select the option to "Update Driver" for the card, and point it to the latest kernel driver
(hardware installation disk), as available on our software installation CD, or on our website at
URL https://www.mil-1553.com/kernel-drivers .
2. For Windows 10, the problem may be related to drivers that comply with the "Secure Boot"
requirement.
In this case, you can download the appropriate kernel driver from our website, at URL
https://www.mil-1553.com/kernel-drivers , filename hw-pci-winx64-Secure-Boot-Win10.zip
(PCI Hardware Installation for Windows 64 Bit Secure Boot).
The regular 64bit kernel driver (non-Secure Boot) is filename hw-pci-winx64.zip at this same
URL.
3. Alternatively, some websites suggest methods How to Disable Driver Signature Enforcement in Windows.

(a) assign a device number to the board
(b) call function Init_Module_XXX to get a handle to the specific module on the board
In order to access the modules on the Excalibur board (to call API functions on the
module), you must first call function Init_Module_XXX (where XXX is replaced by a
few letters that represent the protocol being used). The function Init_Module_XXX
takes two parameters: device number (a number associated with the base board),
module number (the position of the module on the board, 0,1,2,3, etc.).
• NOTE: The association of a device number is with the board, not with the modules.
For PCI[e] boards, the dip switch (SW1) setting of the board is the device number (a
number from 0-15).
• NOTE: If you have only one PCI[e] board in your computer, you may use default
device number 25.
For UNET family boards, you will need to modify the file ExcaliburDevices.ini that is
found in the root folder of your software tools.
Each section in the .ini file has a heading [DEVnumber]. Replace "number" with the
desired device number.
Follow the instructions at the top of the file, and the given examples, to set up the
parameters for your UNET family board.
This ExcaliburDevices.ini file must reside in the /etc directory. Note that this will
require root privileges.

(a) assign a device number to the board
(b) call function Init_Module_XXX to get a handle to the specific module on the board
In order to access the modules on the Excalibur board (to call API functions on the
module), you must first call function Init_Module_XXX (where XXX is replaced by a
few letters that represent the protocol being used). The function Init_Module_XXX
takes two parameters: device number (a number associated with the base board),
module number (the position of the module on the board, 0,1,2,3, etc.).
• NOTE: The association of a device number is with the board, not with the modules.
Under Windows, the device number is assigned using the ExcConfig utility. This
applies to all boards, PCI[e] based, or UNET family. Run ExcConfig to associate a
device number (0–15) with a board type and the board’s Unique ID.
Double-click on some row in the grid - corresponding to the device number (0-15)
listed in the leftmost column.
On the inner screen, click on the desired board type from the list on the left.
For PCI[e] boards, select a Unique ID which corresponds to the dip switch (SW1)
setting of the board.
• NOTE: If you have only one PCI[e] board in your computer, you may use default
device number 25, without listing the board in ExcConfig.
For UNET family boards, select the Connection Type by clicking on the radio button
that corresponds to either USB connection or Ethernet connection.

The API for the modules that sit on the UNET series cards (UNET, UNET2) is the same
as the API for modules that sit on the 4000 series cards (4000-2000-8000).
The current released software installation package for each module will work on all
the cards – 4000 series families, UNET series families.
It is necessary to replace the old dlls that you have used previously, with a full set of
new dlls that will work for both card families. The dlls are found starting at the
following paths (example is generic, for some protocol):
C:\Excalibur\Protocol Software Tools\Source\lib\excMSVisual
Then, open folder Win32 for 32bit dlls, or x64 for 64bit dlls.
Then, open folder Debug or Release, depending on the compiler option you are using.
In this folder you will find DLL and LIB files that you should use when compiling or
running your application. Copy the DLLs to the folder where your EXE sits, or to folder
C:\Windows\SysWOW64.

We now have drivers that fulfill this requirement.
They can be downloaded as filename hw-pci-winx64-Secure-BootWin10.zip at URL http://www.mil-1553.com/kernel-drivers .
This is the hardware installation disk to be used in the Device Manager, to
install a driver for the Excalibur PCI or PCIe card. In addition, you need to
install software drivers for the individual modules on the card.

Please see our FAQ titled “Driver Support for Various Windows Operating
Systems - 64bit Windows and running a 32bit EXE” at URL http://www.mil-1553.com/faqs.

Software Applications

There is no difference in the file structure between the two versions of Exalt.
The newer 64bit ExaltPlus64 reads all the same files as the older 32bit Exalt. This
includes all .pak (package), .rpf (replay), and .scn (scenario) files.

This bug appeared in version 4.1 of this utility, when running
under 64bit Windows. It was fixed in the next version, 4.2.

You can download the current version of this utility (currently 4.8)
from our website at URL http://www.mil-1553.com/applications  .

Use the ExcConfig utility to assign distinct device numbers to each card, according to its dip switch setting.

In any one machine, you can use any combination of up to 16 PCIe, PCI or cPCI cards
simultaneously. When using more than one Excalibur card in a single machine, you
must assign (in the Excalibur Board Configuration utility, ExcConfig) a Unique ID to each
card, thereby associating a device number with the setting of DIP Switch SW1 on the
PCI[e] card. This information is stored in the Windows System Registry and is used when
accessing the card. [ If you have only one card in the machine, you may use the default
device number of 25, or you may assign a device number from 0-15 to your card. ]

Each card must be assigned a Unique ID. Set DIP switch SW1 to a Unique ID by setting
the switch contacts open (or off) to represent logic ‘1’ and closed (or on) to represent logic ‘0’.

Please see the EXC-4000PCI User’s Manual, section 3.3 Dip Switches, for how to
configure the switch. Or, see a more detailed explanation at URL http://www.mil1553.com/help-desk , under “Help Desk Downloads”, file "Hardware Installation Guide".

Note: On Windows Vista/7, due to the User Account Control feature you can no longer
run ExcConfig by double-clicking on its icon or by selecting it from the Start menu.
Instead, right-click on the ExcConfig icon (or menu item) and choose “Run as Administrator”.

Here is sample C code that creates the records in the MerlinPlus dump file.

1. First we have a header record of size 100 bytes:

unsigned short output[100]; output[0] = 'M';

output[1] = 'E';

output[2] = 'R';

output[3] = 'L';

output[4] = 'I';

output[5] = 'N';

output[6] = '+';

for (int i=7; i<100; i++) output[i] = 1;

fwrite(output, 2, 100, out);

 

2. Then, for each message, the message is stored in the file as follows:

typedef struct MONMSG

{

unsigned short msgstatus;

unsigned short time_lo;

unsigned short time_hi;

unsigned short words[36];

};

struct MONMSG msg;

unsigned short size = msg.words[0] & 0x1F;

 

// mode code processing (SubAdress of 0 or 31)

if (((msg.words[0] & 0x3FF) >> 5) == 0){

if (size > 15)

   size = 1;

else

   size = 0;

}

if (size == 0) size = 32;

// adding count+spare+status+timetag(2 bytes)

size += 5;

// adding CW and SW

size += 2;

// check if RT->RT; if yes increase size by adding CW2 and SW2

if (msg.msgstatus & RT2RT_MSG) size += 2;

dump[0] = size;

dump[1] = 0x69;  // spare byte

dump[2] = msg.msgstatus;

dump[3] = msg.time_lo;

dump[4] = msg.time_hi;

for (int i=0;

i<36; i++) dump[i + 5] = msg.words[i];

fwrite(dump, size, 2, out);

Format of Mystic generated (*.ar) ARINC Results File

The file is divided into two parts:
1. The header
2. The actual data

Header structure

bytes   description
   4       length of header
   6       ID
   6       internal
   4       channel number
   4       module number
   4       mode
   4       channel type
   60     description
   4      internal
   4      date/time that the file was created

Explanations of field contents:
   4       length of header

The length of the header is the sum of all the field lengths in the header. The length of the header is
always equal to 100. This value is the same for all *.ar files.

   6       ID

The ID contains the constant string "MySt" with 2 terminating null characters

   6       internal
This is a floating point value containing the Mystic version used to create this AR file

   4       channel number
The channel number is stored as a 4 byte integer value. In merge mode, this value is the number of
channels on the board. For example, if a board contains 4 channels (numbered 0, 1, 2, 3), then the merge
channel number is 4.

   4       module number

The module number is stored as a 4 byte integer value.
   4       mode
Mode legal values are either CH_ARINC_429_RECEIVE (1) or CH_ARINC_429_TRANSMIT (2)

   4       channel type

Here are #define strings for the legal values:
#define CH_NOT_INSTALLED 0
#define CH_ARINC_429_RECEIVE 1
#define CH_ARINC_429_TRANSMIT 2
#define CH_ARINC_561_RECEIVE 3
#define CH_ARINC_561_TRANSMIT 4
#define CH_ARINC_568_RECEIVE 5
#define CH_ARINC_568_TRANSMIT 6
#define CH_ARINC_575_RECEIVE 7
#define CH_ARINC_575_TRANSMIT 8
#define CH_ARINC_582_2_RECEIVE 9
#define CH_ARINC_582_2_TRANSMIT 10
#define CH_ARINC_582_6_RECEIVE 11
#define CH_ARINC_582_6_TRANSMIT 12
#define CH_RS_232 16
#define CH_RS_422 17
#define CH_RS_485 18

   60       description

The description is a free form 60 byte null-terminated string. Nothing needs to be filled in.
   4       internal

This value should be zero.
   4       date/time that the file was created

The date/time is in the C language "time_t" format which is the number of seconds elapsed since 00:00:00
GMT, January 1, 1970

Data Structure
All received data are stored in consecutive blocks. The structure of each block is as follows:
[ The blocks are contiguous and all have the same size (12) which is the sum of the bytes. ]

bytes    description
   4        data word- the ARINC data word
   2        time tag- high- the first 16 bits of the time tag (most significant bytes)
   2        time tag- low- the last 16 bits of the time tag (least significant bytes)
        To calculate the time tag in milli-seconds, perform the following operation:
        In C: (time_tag_high<<16 + time_tag_low)/100
        Or, multiply the first 2 bytes by 2 to the power of 16, add the second 2 bytes
        and divide the sum by 100. This will give the time tag in milli-seconds.

        Note that the timetag resolution is 10 micro-seconds.
        The timetag listed in Mystic when displaying a .AR file is in milliseconds.microseconds .
   4         status word (see below for more bits)
        The status word contains 2 relevant bits:
        bit 03- Parity error: Indicates that an even parity error was detected in the word.
        bit 07- Indicates that the received ARINC-429 word was valid in all respects.

        The order of the bits is as follows:
        15-14-13-12-11-10-09-08-07-06-05-04-03-02-01-00

Standard Mode Status Word for ARINC Channels

WORD_RECEIVED 0x1 (bit00)              Indicates that a Status Word has been written
HI_BIT_CNT_ERR 0x2 (bit 01)             A Hi Bit Count or Null Bit Error was detected in the ARINC word
LO_BIT_CNT_ERR 0x4 (bit 02)            A Lo Bit Count or Null Bit Error was detected in the ARINC word
PARITY_ERROR 0x8 (bit 03)                Parity error inserted in every word in message
INVALID_CODING_ERR 0x10 (bit 04)   A bit level decoding error was detected in the ARINC word
GAP_TIME_ERR 0x20 (bit 05)              A Gap (sync) Time Error occurred between words
VALID_WORD 0x80 (bit 07)                Global bit – the received ARINC word was valid in all respects

NOTE: If the file is a Merge of a number of channels, the channel number for each message is extracted as
follows:

Each record in the .ar file contains a status word. The structure of the status word is:
typedef struct rx_merge_status_word
{
uint word_received :1;
uint hi_bit_count_error :1;
uint lo_bit_count_error :1;
uint parity_error :1;
uint invalid_coding_error :1;
uint gap_time_error :1;
uint reserved1 :1;
uint valid_word :1;
uint merge_channel_code :4;
uint reserved2 :4;
} rx_merge_status_word;

Use merge_channel_code for the channel.

Use the ExcConfig utility (found in folder C:\Excalibur\Utilities\ExcConfig) to assign
distinct device numbers to each card, according to its dip switch setting.
The assigned number relates to the card, not to the modules on the card. So, there is
only one entry per card.
To access the card using our software tools API, first call function Init_Module_XXX
(where XXX is a code for your module type) which takes device number & module
number as parameters (see the Programmer’s Reference / software manual for more
details).
The device number is the number assigned to the card in ExcConfig. The module
number is the position of the specific module on the card (starting from 0).
The return value from function Init_Module_XXX (which we call handle) is used as the
first parameter in all subsequent function calls to access this specific module on this
specific card.

Use the ExcConfig utility to assign distinct device numbers to each card, according to its
dip switch setting.
In any one machine, you can use any combination of up to 16 PCIe, PCI or cPCI cards
simultaneously. When using more than one Excalibur card in a single machine, you
must assign (in the Excalibur Board Configuration utility, ExcConfig) a Unique ID to each
card, thereby associating a device number with the setting of DIP Switch SW1 on the
PCI[e] card. This information is stored in the Windows System Registry and is used when
accessing the card. [ If you have only one card in the machine, you may use the default
device number of 25, or you may assign a device number from 0-15 to your card. ]
Each card must be assigned a Unique ID. Set DIP switch SW1 to a Unique ID by setting
the switch contacts open (or off) to represent logic ‘1’ and closed (or on) to represent
logic ‘0’.
Please see the EXC-4000PCI User’s Manual, section 3.3 Dip Switches, for how to
configure the switch. Or, see a more detailed explanation at URL http://www.mil1553.com/help-desk, under “Help Desk Downloads”, file "Hardware Installation Guide".
Note: On Windows Vista/7/10, due to the User Account Control feature you can no
longer run ExcConfig by double-clicking on its icon or by selecting it from the Start
menu. Instead, right-click on the ExcConfig icon (or menu item) and choose “Run as Administrator".

Hardware - UNET, Discretes, PCIe cards

There is a difference between the USB and Ethernet connections.

(a) If you are using the Ethernet connection, then you can run multiple
applications, one on each module, simultaneously. For example, on a UNET/P2,
you can run MerlinPlus on the two Px modules, and DiscreteGenerator on the
Discrete module.

(b) If you are using the USB connection, then you can run only one application
at a time. This is because the access to USB (via third-party FTDI driver) is a
single communications line.

The single application may access multiple modules. For example, on a
UNET/P2, you could access the two Px modules and the Discrete module from a
single applications program. However, you cannot run two or more programs
using USB connection on different modules.

We do not expect this to change in the future. It is a limitation of the USB (thirdparty) driver.

An INPUT Discrete
    Will register a 1 when a TTL/Avionics voltage is applied
    Will register a 0 when GND is applied
    If it is left floating/OPEN, then
       (a) If the discrete input is pulled up to a TTL/Avionics voltage (either internally or
       externally by the user), then the discrete will register a value of 1
       (b) If the Discrete input is not pulled up to any voltage, then the Discrete will register a value of 0

All OUTPUT Discretes should be pulled up (either factory installed internally, or externally
by the user) to the desired TTL/Avionics voltage.
    When an output Discrete is set to 0, the line will be pulled to GND
    When an output Discrete is set to 1, the line will be left floating and will be pulled up
       to the pull up voltage on the line.
    If the output discrete is not pulled up the line will be left floating - this is not recommended !

Voltage Levels:
TTL:
digital 0: 0 to +0.8 volts
digital 1: +2 to +5 volts
Avionics:
digital 0: 0 to +3.5 volts
digital 1: +7.5 to +32 volts

The INPUT discrete channel must be configured according to the voltage level chosen.

There is a difference between the USB and Ethernet connections.


(a) If you are using the Ethernet connection, then you can run multiple
applications, one on each module, simultaneously. For example, on a
UNET/P2, you can run MerlinPlus on the two Px modules, an
DiscreteGenerator on the Discrete module.

(b) If you are using the USB connection, then you can run only one
application at a time. This is because the access to USB is a single communications line.

The single application may access multiple modules. For example, on a
UNET/P2, you could access the two Px modules and the Discrete module
from a single applications program. However, you cannot run two or more
programs using USB connection on different modules.

We do not expect this to change in the future. It is a limitation of the USB (third-party) driver.

For PCI[e] cards, the device number is the dip switch setting.

For UNET cards:
1. Please use the device number defined in the file "ExcaliburDevices.ini",
typically something like 1, 2, or 3.
2. Make sure that this .ini file resides in the /etc directory. Note that this
will require root privileges.

When using the USB connection to communicate with the UNET, you can run only
one application at a time. The USB driver (FTDI) has a single line connection to the
device, so only one application can access the device at a time.

Solution: You can write an application that (a) sets up multiple sub-applications within
a single application, or (b) that runs multiple threads.

OR: If you want to run two applications simultaneously, you need to use the Ethernet
connection to communicate with the UNET device.

The EXC-4000PCIe board will not work without the power cable connected.

The PCIe bus supplies enough power to drive the base board, but not enough power to drive the
modules. Therefore, it is necessary to connect a SATA-type power cable from the computer’s power
supply to the connector on the card.

So, please verify that you have connected the SATA-type power cable from the power supply to the
card. On older revisions of the card, the connector is of the Molex type.

If this does not help, then please contact our support team via our website, at URL http://www.mil1553.com/technical-support .

All software tools installation packages have a file that describes how to install the hardware. The file
name is readme.pdf. (For older product releases, the file name may be readme.txt.)

This file can be found in the root folder of the installation (on the Excalibur CD), or in the ZIP file you
downloaded from our website. In addition, it is installed in the software tools installation folder
“C:\Excalibur\ProductName Software Tools”.

You can also download this file “Hardware Installation Guide”, from our website, at www.mil-1553.com.
Click on SUPPORT | Help Desk.

Or go to URL https://www.mil-1553.com/help-desk  .

The Excalibur PCIe cards will not work without the power cable connected.
The PCIe bus supplies enough power to drive the base card, but not enough power to
drive the modules. Therefore, it is necessary to connect a SATA-type power cable from
the computer’s power supply to the connector on the card.
So, please verify that you have connected the SATA-type power cable from the power
supply to the card. On older revisions of the card, the connector is of the Molex type.
If this does not help, then please contact our support team via our website, at URL
http://www.mil-1553.com/technical-support.

We first developed the 4000PCI card family (PCI, PCIe, etc) – which has room for up to
four modules.
We then developed the 2000PCI card family as a cheaper version for use with cheaper
module types – which has room for up to two modules.
We then developed the 8000PCIe card family to deliver a card with additional modules –
which has room for up to eight modules.
All three card families are essentially the same underneath. Therefore, the hardware
(kernel) driver lists them with a generic name (4000).
In the Device Manager,
• the PCI cards are listed in the Device Manager as the Excalibur 4000PCI Card
• the PCIe card are listed in the Device Manager as the Excalibur 4000 Series Card.

MIL-STD-1553

We understand the case as follows:
• The RT receives the command from the BC, and records that it
responded with the correct RT status word.
• However, the BC does not see the RT response.


Please check that
• this is the only RT (with this RT number) connected on the bus
• you have connected 78 Ohm termination to the ends of the 1553 bus
• the modules on the 1553 bus are connected with the appropriate
coupling method, such that the dip switch settings on the 1553Px
module on the card match the actual coupling method, transformer
coupled, or direct coupled (as per the User's Manual, section 7.3)
cable length, how long is the cable from the stub to the bus (the
specification suggests: for direct coupling less than one foot; for
transformer coupling up to 20 feet)

Our modules simulate 1553 communications.
Any specific module is one single channel of 1553 communications. That is, a
module can play only one of the three available modes at one time: BC, RT,
Monitor.
A Monitor can run opposite a BC and an RT, and record all the traffic, assuming
that all three are on the same 1553 bus.
In BC & RT modes, we have an additional section of memory that records all bus
traffic (like a quasi-Monitor, called Internal Concurrent Monitor), with each
message listed individually in series, and with room for over 400 messages.
Multi-function (Px) means that
- RT mode can simulate (activate) any number of RTs, up to all of the RTs, 0-31
- BC mode can simulate (activate) any number of RTs (say, to fill in for those RTs
for which you have no real RT or other channel playing RT mode)
- error injection exists (is available, can be set) in both BC & RT modes
Single function (PxS) means that
- RT mode can simulate (activate) only one RT (any one of them, from 0-31)
- BC mode cannot simulate (activate) any RTs
- no error injection is allowed in any mode (BC, RT)

The 1760 version of the module is a superset of the 1553 version. That is, all of the features of 1553
exist in the 1760 module, plus there are a few additional features that exist only in the 1760 version.
The API is the same, with some additional functions that implement the additional 1760 features.
These features are:

1. Header Word
Some SubAddresses (1,11,14) require that the first data word be a specific value (in specific cases).
These are listed in the manual (hardware & software), under sections called "Header Word" or
"1760 Options".
• This is designed as per the 1760 specification.
• We allow you to disable/suppress this requirement, using function Set_Header_Exists_Px, with
parameter HEADER_DISABLE.
2. Checksum
In BC mode, you can set a message to require a checksum as the last data word, as defined in the
manuals (using function Enable_Checksum_Px). The module will calculate the checksum and place
it as the last data word in the BC2RT message, or check if the received checksum in an RT2BC
message is correct.
[ You can also set that the checksum for a BC2RT message should have an error injected into it
(using function Enable_Checksum_Error_Px). ]
In RT mode, you can set that certain datablocks (for Rx or Tx) can be designated to require a
checksum in the last data word (using function Set_Checksum_Blocks_Px). A datablock can be
associated with any RTid (Rx or Tx), using function Assign_RT_Data_Px.
In Monitor mode, the module always looks for the checksum and sets a flag in the message status
word if the checksum word is not correct.

Here is sample code to call these functions:
-----------------
for BC mode:
// Enable_Checksum_Px();
msgentry = 0;
enable = ENABLE; // or DISABLE;
status = Enable_Checksum_Px(handle, frameid, msgentry, enable);
if (status < 0)
{
printf("Enable_Checksum_Px returned error: %s\n",Print_Error_Px(status));
printf("Press any key to exit the program ... ");
_getch();
}
else
printf("Enable_Checksum_Px returns status value %d\n", status);

// Enable_Checksum_Error_Px();
msgentry = 1;
enable = ENABLE; // or DISABLE;
status = Enable_Checksum_Error_Px(handle, frameid, msgentry, enable);
if (status < 0)
{
printf("Enable_Checksum_Error_Px returned error: %s\n",Print_Error_Px(status));
printf("Press any key to exit the program ... ");
_getch();
}
else
printf("Enable_Checksum_Error_Px returns status value %d\n", status);
-----------------
for RT mode:
// Set_Checksum_Blocks_Px();
int csum_blocks=50;
status = Set_Checksum_Blocks_Px(handle, csum_blocks);
if (status < 0)
{
printf("Set_Checksum_Blocks_Px returned error: %s\n",Print_Error_Px(status));
printf("Press any key to exit the program ... ");
_getch();
}
else
printf("Set_Checksum_Blocks_Px returns status value %d\n", status);

(a) Use function Set_RT_Active_Px to make the RT active/simulated. If your module is multifunction Px, then you can activate multiple RTs (numbered from 0-31). If your module is single-function PxS, then you can activate only one RT.

(b) Use functions Assign_RT_Data_Px to associate a data block with some RTid, and
Load_Datablk_Px to load data into the data block.

(c) Somehow decide when you want to change the data (interrupt, or after some given
time), and call Load_Datablk_Px with the new data. If you want a built-in mechanism that
will help ensure data integrity (so that you do not change the data block while it is being
transmitted, which may result in a mixed block of old & new data), then you can use double
buffering, using function Assign_DB_Datablk_Px.
If you want to use multiple (up to 16) data blocks for a single RTid, use function
Set_RTid_Multibuf_Px.

(d) Use function Get_Next_Message_RTM_Px or Get_Next_Mon_Messgae_Px to extract
messages from the Internal Concurrent Monitor.

The software manual entry for these functions shows the message block (structure) content;
and what values are returned (e.g., enomsg = -18, if there is no additional new unread
message at present). You can then parse the command word and decide to take different
actions depending on the message type.

(a) Use function Set_RT_Active_Px to make the RT active/simulated. If your module is multi-function Px, then you can activate multiple RTs (numbered from 0-31). If your module is single-function PxS, then you can activate only one RT.

(b) Use functions Assign_RT_Data_Px to associate a data block with some RTid, and
Load_Datablk_Px to load data into the data block.

(c) Somehow decide when you want to change the data (interrupt, or after some given
time), and call Load_Datablk_Px with the new data. If you want a built-in mechanism that
will help ensure data integrity (so that you do not change the data block while it is being
transmitted, which may result in a mixed block of old & new data), then you can use double
buffering, using function Assign_DB_Datablk_Px.
If you want to use multiple (up to 16) data blocks for a single RTid, use function
Set_RTid_Multibuf_Px.

(d) Use function Get_Next_Message_RTM_Px or Get_Next_Mon_Messgae_Px to extract
messages from the Internal Concurrent Monitor.

The software manual entry for these functions shows the message block (structure) content;
and what values are returned (e.g., enomsg = -18, if there is no additional new unread
message at present). You can then parse the command word and decide to take different
actions depending on the message type.

The simple answer is yes.

We have a feature called Internal Concurrent Monitor (ICM) in both BC and RT modes. This
sets aside a section of memory on the module to act as a quasi-Monitor (within the confines
of the BC or RT).
In the ICM memory area, we store a record of all message traffic on the bus. Effectively, we
have a Monitor stored within the memory area of the RT. All data words that the BC sends
over the bus to an RT (BC2RT message), and all data words transmitted by some RT over the
bus (RT2BC or RT2RT messages) are recorded in the ICM, along with the command words &
status words, and an attached timetag stamp (plus an additional internally built message
status word).
Each message is stored sequentially in the buffer. Buffer size is defaulted to 409 blocks.
You can read more about this memory area in the User's Manual (hardware), chapter 5.
You can read up on the API functions used for monitoring in the Programmer's Reference
(software). Use functions Get_Next_Message_RTM_Px or Get_Next_Mon_Message_Px.
Here is a snippet from the software manual:
Get_Next_Mon_Message_Px reads the message block following the message block read in
the previous call to Get_Next_Mon_Message_Px.
This function can be used in all modes, instead of:
Get_Next_Message_Px in Monitor mode,
Get_Next_Message_BCM_Px in BC mode or
Get_Next_Message_RTM_Px in RT mode.

Bottom line: If you want to be an RT and still be able to get all of the message contents as
individual messages (aka Monitor), you should be able to do this with a single module in RT
mode, reading messages from the ICM. This works for multi-function Px modules, as well
as for single-function PxS modules.

Please see our demo program demo_cmon.c which uses this methodology.

Unfortunately the answer is no.

Our software drivers need to match the architecture and registers of the respective
modules. Even though both module families are for the MIL-STD-1553
communications protocol, the chip architecture of the two families is different.
Therefore, the software APIs are inherently different. So much so, that it is fairly
impossible (in our opinion) to port code from one module type to the other. Porting
code would instead require a rewrite.

The 1553MCH family is based on a chip that we buy from another company. This
module family has basically been replaced by our own M4K1553PxS module family.

The 1553Px family is our own in-house development. We have moved to our third
generation of chips for this family, keeping the same basic architecture and registers,
so that customers can easily replace an older card with a newer one.

The simple answer is yes.

We have a feature called Internal Concurrent Monitor (ICM) in both BC and RT modes. This
sets aside a section of memory on the module to act as a quasi-Monitor (within the confines
of the BC or RT).
In the ICM memory area, we store a record of all message traffic on the bus. Effectively, we
have a Monitor stored within the memory area of the RT. All data words that the BC sends
over the bus to an RT (BC2RT message), and all data words transmitted by some RT over the
bus (RT2BC or RT2RT messages) are recorded in the ICM, along with the command words &
status words, and an attached timetag stamp (plus an additional internally built message
status word).
Each message is stored sequentially in the buffer. Buffer size is defaulted to 409 blocks.
You can read more about this memory area in the User's Manual (hardware), chapter 5.
You can read up on the API functions used for monitoring in the Programmer's Reference
(software). Use functions Get_Next_Message_RTM_Px or Get_Next_Mon_Message_Px.
Here is a snippet from the software manual:
Get_Next_Mon_Message_Px reads the message block following the message block read in
the previous call to Get_Next_Mon_Message_Px.
This function can be used in all modes, instead of:
Get_Next_Message_Px in Monitor mode,
Get_Next_Message_BCM_Px in BC mode or
Get_Next_Message_RTM_Px in RT mode.
Bottom line: If you want to be an RT and still be able to get all of the message contents as
individual messages (aka Monitor), you should be able to do this with a single module in RT
mode, reading messages from the ICM. This works for multi-function Px modules, as well
as for single-function PxS modules.

Please see our demo program demo_cmon.c which uses this methodology.

1. As per the 1553 spec, the BC is the active player in the protocol, creating a bus list of messages which it
transmits over the 1553 bus. The messages are of multiple types including BC2RT (BC sends the data words
to the RT), RT2BC (BC requests that the RT transmit back data), RT2RT (BC requests that one RT receive
data, and a different RT transmit the data).
Since the BC must verify that the message was properly completed, the protocol rules include that the BC
will verify (for RT2BC & RT2RT messages) that it detected the receipt of the requested number of words
from the RT.
So, by nature of the protocol, the BC will receive the data transmitted by the RT. And, our API supplies
functions for retrieving any message in the bus list, at any given time.
2. To help retrieve messages, we added a feature called Internal Concurrent Monitor (ICM) in both BC and
RT modes. This sets aside a section of memory on the module to act as a quasi-Monitor (within the confines
of the BC or RT).
In the ICM memory area, we store a record of all message traffic on the bus. Effectively, we have a Monitor
stored within the memory area of the BC. All data words that the BC sends over the bus to an RT (BC2RT
message), and all data words transmitted by some RT over the bus (RT2BC or RT2RT messages) are
recorded in the ICM, along with the command words & status words, and an attached timetag stamp (plus
an additional internally built message status word).
Each message is stored sequentially in the buffer. Buffer size is defaulted to 409 blocks.
You can read more about this memory area in the User's Manual (hardware), chapter 5.
You can read up on the API functions used for monitoring in the Programmer's reference (software). use
functions Get_Next_Message_BCM_Px or Get_Next_Mon_Message_Px.
Here is a snippet from the software manual:
Get_Next_Mon_Message_Px reads the message block following the message block read in the previous call
to Get_Next_Mon_Message_Px.
This function can be used in all modes, instead of:
Get_Next_Message_Px in Monitor mode,
Get_Next_Message_BCM_Px in BC mode or
Get_Next_Message_RTM_Px in RT mode.
3. Bottom line: If you want to be a BC and still be able to get all of the message contents as individual
messages (aka Monitor), you should be able to do this with a single module in BC mode, reading messages
from the ICM.
Please see our demo program demo_cmon.c which uses this methodology.

(a) Set up your bus list to transmit a BC2RT (Receive) message to the Receive SA,
followed by an RT2BC message to the Transmit SA. You can set this bus list to be
transmitted one shot, multiple times (up to 255), or continuously.

(b) On the RT side, data is stored in data blocks. You can assign a specific data block to a
specified RTid, which is a designation of RT number, SA number, and direction of data
transmission (Receive or Transmit, from the RT’s perspective); using function
Assign_RT_Data_Px.

If you do not assign a data block to your RTid, then the default data block assigned is
number 0. In this case, the last data received for a Receive (BC2RT) message will be the
data that is transmitted for a Transmit (RT2BC) message.

(c) Call the function Assign_RT_Data_Px twice, using the same data block number for
the two RTid’s, where the RTid’s have the same RT & SA, but the direction of one is 0
(Receive) and the direction of the other is Transmit (1).

(a) Set up your bus list to transmit a BC2RT (Receive) message to the Receive SA,
followed by an RT2BC message to the Transmit SA. You can set this bus list to be
transmitted one shot, multiple times (up to 255), or continuously.

(b) On the RT side, data is stored in data blocks. You can assign a specific data block to a
specified RTid, which is a designation of RT number, SA number, and direction of data
transmission (Receive or Transmit, from the RT’s perspective); using function
Assign_RT_Data_Px.
If you do not assign a data block to your RTid, then the default data block assigned is
number 0. In this case, the last data received for a Receive (BC2RT) message will be the
data that is transmitted for a Transmit (RT2BC) message.

(c) Call the function Assign_RT_Data_Px twice, using the same data block number for
the two RTid’s, where the RTid’s have the same RT & SA, but the direction of one is 0
(Receive) and the direction of the other is Transmit (1).

(a) One of the features of the 1760 specification is the requirement that some
SubAddresses (1, 11, 14), for some types of messages, require that the first data word
(called a header word) be a specific pre-defined value.
If the first data word does not match the pre-defined value, then the error bit is turned
ON in the Message Status Word. This indicates that the “Header Word received does
not match the value set in the Header Value Table.”

(b) To bypass this error, so that it does not get generated, you can call function
Set_Header_Exists_Px for the specific desired SubAddress, with parameter enable set
to HEADER_DISABLE. In this case, the error bit will not be turned ON.

1. Major frame is the list of all the messages in the current frame. We place a bus list of messages in a
FRAME struct, as defined in file bcrun.h, and used in all the BC demo programs: demo_bc1, demo_bc2,
demo_2crd, demo_2md, demo_async, demo_cmon, demo_minor.

You can create multiple major frames (call Create_Frame_Px to create each individual frame), and then
decide which one is the (current) frame to transmit, using Start_Frame_Px.

You can create an asynchronous frame which can then be transmitted at will, in the middle of the
transmission of the major frame, when the current message completes being transmitted over the bus
(using functions Select_Async_Frame_Px and Send_Async_Frame_Px). When the async frame completes
transmission, control is returned to the next message of the major frame.

2. Within any list of messages, each message is created using function Create_1553_Message_Px. This
assigns an id to the message. Each message is added to its desired frame into the FRAME structure, with
two parameters: id and intermessage gaptime. The intermessage gaptime is the time the firmware is to
wait between the completion of one message and the beginning of transmission of the next message.

3. The major frame time (set by calling function Set_Frame_Time_Px) sets the total frame time for all of
the messages in our major frame. The firmware processes & transmits all the messages in the major
frame, all the while keeping an accounting of how much time was spent from the beginning of the first
message transmission (by setting a counter equal to the frame time, and counting down).

If all the messages have been transmitted and the counter is not yet 0, then the firmware waits until the
counter gets to 0 before continuing. That is, if the frame is scheduled to be transmitted more than once,
either continuous using Run_BC_Px(handle, num_times), where num_times=0, or N-times where
num_times is a number between 2-255, the firmware will wait until the counter counts down to 0 before
going back to retransmit the frame.

4. Minor frames are designed to be used to create groups of messages that need to be transmitted at
specific intervals, say every 10 or 20 msec.
For example, if you have
   • group A of messages that need to be transmitted every 20 msec,
   • group B of messages that need to be transmitted every 10 msec,
   • group C of messages that need to be transmitted every 40 msec,
then you determine the lowest common denominator of the time periodicity (in this case 10 msec) and
group the messages using Minor Frames. In this case, your Minor Frame (MF) time will be 10 msec. You
will group the messages with a "marker" (MF) message in between groups.

The MF message (Create_1553_Message_Px with message type MINOR_FRAME) is used to tell the
firmware how long to count down before allowing the firmware to move to the next group of messages.
Hence, we use MF markers between every set of messages that form a group. One MF marker message at
the beginning of the major frame list, and then groups of messages delineated by MF messages. At the
end of the major frame we do not place a MF message.

Since we want the MF time to drive the timing, we set the major frame to (Set_Frame_Time_Px) to a very
small number, say 10 (this parameter is in microsec).

For the example I started above, your major frame would look like this:
MF-B-MF-B-A-MF-B-MF-B-A-C

5. You can read more about minor frames in the User’s Manual (hardware manual), section 3.5.

This requires a short tutorial on the concepts of 1553 :

We start with a bus, over which the 1553 traffic flows. There are three players: BC (Bus Controller), RT
(Remote Terminal), Mon (Bus Monitor).

The BC controls the whole flow of messages. The BC is active, and the other players (RT and Mon) are
passive. All messages are initiated by the BC, who sends out the command word. All players on the bus
listen for a command word, and determine if it is for them to "pick up."

The command word includes information as follows:
   • target RT-SA (Remote Terminal number, SubAddress number)
   • word count
   • in which direction is the data traveling, from the perspective of the target RT: Receive (BC2RT)
       means that the RT receives the data words (and the BC sends the data words); Transmit (RT2BC)
       means that the RT transmits the data words
       [ See Appendix B MIL-STD-1553 Message Formats in the manuals for a description of the different
       message types in 1553. ]

RT status word (see Appendix A MIL-STD-1553 Word Formats in the manuals)
   • is either the first word returned by the RT (followed by data), or is sent by the RT after receiving
       all the data word (depending on the message type)
   • contains the RT address, acting as an ACKnowledge to say "I am here"; has a number of other
       information bits (not mandatory)
   • has one bit which can indicate to the BC that the RT wants service (SRQ bit), for which the BC will
       make a new message requesting this information from the RT

The firmware for the different players (in the given card or box) is built according to the rules of the 1553
protocol. Hence, any player on the bus who receives the command word knows exactly what to expect
next (command word, data word, status word), and will report an error if the unexpected occurs.

Our 1553 GUI application, MerlinPlus, in each of the modes, takes the command word, parses it, and
decides how to display the message based on the parsed result. It displays command word, command
type, target RT-SA, word count, error or not.

1. As per the 1553 spec, the BC is the active player in the protocol, creating a bus list of messages which it
transmits over the 1553 bus. The messages are of multiple types including BC2RT (BC sends the data words
to the RT), RT2BC (BC requests that the RT transmit back data), RT2RT (BC requests that one RT receive
data, and a different RT transmit the data).

Since the BC must verify that the message was properly completed, the protocol rules include that the BC
will verify (for RT2BC & RT2RT messages) that it detected the receipt of the requested number of words
from the RT.

So, by nature of the protocol, the BC will receive the data transmitted by the RT. And, our API supplies
functions for retrieving any message in the bus list, at any given time.

2. To help retrieve messages, we added a feature called Internal Concurrent Monitor (ICM) in both BC and
RT modes. This sets aside a section of memory on the module to act as a quasi-Monitor (within the confines
of the BC or RT).

In the ICM memory area, we store a record of all message traffic on the bus. Effectively, we have a Monitor
stored within the memory area of the BC. All data words that the BC sends over the bus to an RT (BC2RT
message), and all data words transmitted by some RT over the bus (RT2BC or RT2RT messages) are
recorded in the ICM, along with the command words & status words, and an attached timetag stamp (plus
an additional internally built message status word).

Each message is stored sequentially in the buffer. Buffer size is defaulted to 409 blocks.

You can read more about this memory area in the User's Manual (hardware), chapter 5.

You can read up on the API functions used for monitoring in the Programmer's reference (software). use
functions Get_Next_Message_BCM_Px or Get_Next_Mon_Message_Px.

Here is a snippet from the software manual:

Get_Next_Mon_Message_Px reads the message block following the message block read in the previous call
to Get_Next_Mon_Message_Px.

This function can be used in all modes, instead of:
Get_Next_Message_Px in Monitor mode,
Get_Next_Message_BCM_Px in BC mode or
Get_Next_Message_RTM_Px in RT mode.

3. Bottom line: If you want to be a BC and still be able to get all of the message contents as individual
messages (aka Monitor), you should be able to do this with a single module in BC mode, reading messages
from the ICM.

Please see our demo program demo_cmon.c which uses this methodology.

The 1553B card or module has two cables for each 1553B channel, one cable for Bus A
and one cable for Bus B. Normal 1553B communication requires connecting all bus A
cables to one 1553B bus, and all bus B cables to another 1553B bus.

A 1553B bus can be a stub coupler with some number of stubs, and with a terminating
resistor on the stubs at the ends of the bus.

Please see the FAQ document titled “1553 Bus Connections diagram.pdf” for a diagram
with a number of 1553B devices connected to busses A & B.

Our demo_loopback program performs two kinds of loopback:
   • Internal loopback test: checks connections internal to the card; does not require
      any external cable connections to perform the test
   • External loopback test: checks connections external to the card; requires
      connecting the bus A and bus B cables to the same 1553B bus

Here is a diagram of the cable connections needed for the External loopback test

 

20230616094718.280.jpg

1. It is necessary to install the software tools for the specific module/board, in this case, M4K1553Px module
on EXC-4000PCI board. This installs two DLLs - one for the 4000PCI base board, and one for the M4K1553Px module.

The DLL name is different:
     M4K1553Px module: Exc1553Px.dll (for Borland compiler) or Exc1553PxMs.dll (for Microsoft
compiler). px.dll or pxms.dll are also available.
     PCI/Px board: pcipx.dll (for Borland compiler) and pcipxms.dll (for Microsoft compiler).
In your project file, replace the use of pcipx.lib/pcipxms.lib with Exc1553Px.lib/Exc1553PxMs.lib, or rename
these new DLLs (Exc1553Px[Ms]) with the previously used names (pcipx[ms]).

2. The function names have been preserved, almost in entirety, for backwards compatibility. This assumes
that you have only one module on the board. If you have more than one module, it will be necessary to
move to the some of the new function names. Please see item #4.

3. Initialize/Release differences:
     PCI/Px board : Init_Card initializes all modules on the board. Release_Card releases resources for all modules.
     M4K1553Px module: Init_Module_Px initializes only the specific module as per the function
parameters. Use Release_Module_Px to release resources for this specific module.

NOTE: If you are porting a project from PCI/P1 to EXC-4000PCI with one M4K1553Px module (in position 0),
then you can use the existing application source code as is, including function calls Init_Card and
Release_Card. We added these functions to the DLL (in source file initcard.c) to handle PCI/P1 or PCI/EP
cards.

NOTE: If you have an EXE that ran on a PCI/P1, and want to run the EXE on a EXC-4000PCI with one
M4K1553Px module (in position 0) without recompiling, then install the M4K1553Px software tools, rename
the DLL (for the appropriate compiler) to the same name that was used in the application (pcipx.dll or
pcipxms.dll), and run the EXE.

4. Init_Module_Px takes two arguments:
     device_number - use default value of 25, or as defined using ExcConfig
     module_number - the specific module on the board that you wish to initialize (0,1,2,3)
Upon success, the function return value is designated as the "handle" for this module. Use this "handle" as
the first (additional) parameter in all function calls.
All function names have been modified to have a suffix of "_Px". If you wish to use the old function names,
which do not use the "handle" parameter, please see item #5.

5. To use the old function names (without the "_Px" suffix, and without the additional "handle" parameter),
include the file proto_px_back.h in your application. This includes the function prototypes for the backwards
compatible functions. Then, replace Init_Card with Init_Module_Px; and Release_Card with Release_Module_Px.

6. If you have more than one module, you must call the function Init_Module_Px for each module. The
function returns a "handle" value.

All function calls apply to the currently selected module. If you use the new function names (with the suffix
_Px), then use the "handle" for this module as the first parameter. If you want to use the old function
names, include the file proto_px_back.h in your application, and proceed as in item #7.

7. Using old function names: Use Select_Module to select a specific module. Then call the mode specific
functions that you wish to apply to this module.

Therefore, to switch to another module (i.e., to apply function calls to another module), call
Select_Module(other_module_number), and then call the mode specific functions that you wish to apply to
this module.

To switch back to the first module, call Select_Module(first_module), and then call the mode specific
functions that you wish to apply to this module.

In BC mode, for each message (in the bus list) that is transmitted over the 1553 bus,
the module/card generates an internal status word. The hi bit of this status word
indicates that the message completed processing (value of 0x8000), and additional
bits indicate errors. These functions return (as an output parameter) this status word,
whose bits are defined in the manuals.

The return value of these functions is a signed integer. 0 means all is OK; a negative
number means that there is a problem.

The output parameter message status word is valid only if the hi bit (value of 0x8000)
is set (indicating message complete).

After calling this function, the message status value is zeroed out. So, if you call the
function twice in a row, before transmitting the message again, you will get a return
message status word value of 0.

We suggest using the newer (replacement) function Get_Msgentry_Status_Px instead
of the old (legacy) function Get_Msg_Status_Px. The bits returned are identical for
both functions.

LabVIEW and LabWindows

  1. Concerning LabVIEW and DLLs:
    For some of our LabVIEW products, we have an interim dll called a Dispatcher
    DLL, which itself calls out to the underlying DLL.
    Please note that the dispatcher DLL and its associated INI file (which must be
    bundled together in the same folder) allow you to be flexible in where the rest
    of the DLLs are expected to be found.
    • Your application needs to first access the dispatcher DLL.
    • The INI file lists the name of the major underlying DLL, and where the DLL
    sits.
    • You can set the DLL path to be WINSYSDIR or SysWOW64 if that is good for
    you.
  2. Additional explanation:
    Each VI has an associated Call Library Function, which has an associated [Library
    Name or DLL] and [Function Name].

For some of our LabVIEW products, the DLL name containing the API function
called out by the VI is listed directly in the VI. For some of our LabVIEW
products, we have an interim dll called a Dispatcher DLL, which itself calls out to
the underlying DLL.
When we use a Dispatcher DLL, the first VI call, Init_Module, opens an INI file,
ExcSWToolsForLV.ini, in which there are two lines that tell the dispatcher dll the
name of the underlying DLL, which actually is the API for all functions, and its
path (where it can be found).
This call to function Init_Module, loads the underlying DLL and creates pointers
to each API function therein. Then, for each VI called, the underlying API
function now has an associated pointer, and the actual function can be called.
We place the dispatcher DLL and the INI file in the folder where the LLB files sit.
So, when you open one of our application VIs, it can find & open the necessary
DLLs.
For example, for 429RTx, our default setting in the INI file is:
DLL name=Exc429RTx.dll
DLL path=PCI_and_UNET_DLLS
This indicates that the underlying dll is named Exc429RTx.dll, and is found in
subfolder PCI_and_UNET_DLLS. This folder contains additional DLLs that are
required by Exc429RTx.dll.

1. Can I run a VI written with LabVIEW 32-bit on LabVIEW 64-bit and Vice Versa?
The following information is taken from the FAQ at URL:
http://www.ni.com/product-documentation/54519/en/  .
Yes, a VI that is written with LabVIEW 32-bit development system can be opened in
LabVIEW 64-bit and vice versa because the code is not compiled until the VI is run.
2. Should I Use LabVIEW 32-Bit or 64-Bit?
The following information is taken from the FAQ at URL:
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000kIctSAE&l=en-IL 
Issue Details:
I am looking to download LabVIEW for the first time, or to develop a new application
in LabVIEW. Should I use the 32-bit or the 64-bit version?
Solution:
For our users on 32-bit or 64-bit operating systems, we recommend using LabVIEW
32-bit. This version has wider compatibility with Modules and Toolkits, as well as
greater support for 3rd-party Add-Ons.
LabVIEW 64-bit does not provide any speed improvements over LabVIEW 32-bit, but
does allow the program access to more system memory at once. While most of our
users find that the 32-bit version provides plenty of resources for their projects, some
specialized application areas may require this extra memory. If your program is likely
to handle very large arrays or to process images that are particularly high definition,
you may find that LabVIEW 64-bit is the better option for you.
In general, we recommend that developers start by working in LabVIEW 32-bit, and
only move to LabVIEW 64-bit if they find that they need the additional memory that it
provides.

Our CVIs are written & compiled under 32bit Windows. However, they can be run OK on 64bit Windows, providing that
they have access to the necessary 32bit DLLs.

Once you have verified that the card is installed under 64bit Windows, is visible in the Device Manager, has been
assigned a device number in ExcConfig, and is visible to Showhex, then you can proceed to installing the software.

Some of our LabWindows CVI tools products have been repackaged and are available for installation & use under 32bit
and 64bit Windows. Some have not yet been repackaged for use under 64bit Windows, and will install only on a 32bit
machine. In order to get these working under 64bit Windows, please follow these instructions:

1. On a 32bit Windows machine, install from the CD or download from our website the installation for "[product]
LabWindows CVIs".

The package will install to folder
"C:\Program Files\Excalibur\[product]-CVI" . The CVIs require a 32bit dll, compiled using the Microsoft compiler.

2. On this same 32bit Windows machine, install the 32bit Software Tools for this product. Go to either the Windows
system folder (C:\Windows\System32) or the software installation folder (C:\Program Files\Excalibur\[product]
Software Tools\excMSVisual) and copy DLLs named [product]ms.dll and exc4000ms.dll to the folder where the CVIs are
installed (the application folder).

3. There is one additional file needed in the application folder, where you will run your EXE. It is the 32bit version of
kernel file frontdesk.dll. This file is part of the Hardware Installation Disk for PCI, hw-pci-w2k.zip, on the webpage at
URL http://www.mil-1553.com/kernel-drivers-installation-software .

4. After you have copied the 32bit DLLs [product]ms.dll, exc4000ms.dll, and frontdesk.dll to the folder where the CVI
application EXE sits - copy this whole folder to your 64bit machine.

You should now be able to run the CVI application EXE under 64bit Windows.

Website Issues

To navigate to the correct page on our website (shortcuts to various M4K module and other popular
webpages), please see FAQ titled “Website - Where can I find the files”.

Once you are at the desired webpage, please note the following naming conventions:

Acrobat files (with a red icon) are manuals
_hw for hardware manual
_sw for software API manual
hw- is the prefix for hardware installation disk (for the Device Manager)
m4k- is the prefix for the specific M4K module type
-st- is for software tools packages
-st-win is for 32bit Windows software tools
-st-winx64 is for 64bit Windows software tools
-st-win32-win64 is combined software tools for 32bit and 64bit Windows
-st-ln is software tools for 32bit Linux
-st-ln64 is software tools for 64bit Linux
-vi-win is for LabVIEW tools
-cvi-win is for LabWindows CVI tools

Please visit our website (home page) at www.mil-1553.com .

At the top right of the Excalibur homepage, click on Login. Once you register and log in,
you can download (for free) any of the software package files, manuals, data sheets, etc.
available on our website.

On the homepage, near the top of the page, there are a number of buttons.
   • Click on the “Downloads” button.
   • Click on the selection which best matches the card that you have (e.g., EXC-4000
      Family” if you have a 4000 card with M4K series modules).
   • Click on the module name that matches the module for which you need the current software release.

The webpage now displays a list of available packages for this module, including
software manual, hardware manual, software tools for Windows (32bits), software tools
for Windows 64bits, PCI hardware installation for Windows (different flavors), and other
software packages that are available for this module.

On all pages for the 4000 family cards & modules, the files are arranged in six
categories: All, Windows, Linux, Resources (manuals, GUI applications), LabVIEW &
LabWindows, legacy & Other OS.

Shortcuts to the webpages of our popular cards and modules:

Kernel drivers (hardware installation disk): https://www.mil-1553.com/kernel-drivers 
Applications: https://www.mil-1553.com/applications 
FAQs (Frequently Asked Questions): https://www.mil-1553.com/faqs 

Software tools, hardware installation, and manuals for:

4000 card family (listing of all the modules): http://www.mil-1553.com/4000-family 
4000PCI, 4000cPCI, and 4000PCIe card: http://www.mil-1553.com/4000 
2000PCI & 2000PCIe card: http://www.mil-1553.com/2000 
4000p104Plus card: https://www.mil-1553.com/4000p104 
4000VME card: http://www.mil-1553.com/4000vme 
M4K1553Px module: http://www.mil-1553.com/m4k1553px 
M4K429RTx module: http://www.mil-1553.com/m4k429rtx 
M4KSerial module: http://www.mil-1553.com/m4kserial 
M4KDiscrete module: http://www.mil-1553.com/m4kdiscrete 
M4KMMSI module: http://www.mil-1553.com/m4kmmsi 
M4KH009 module: https://www.mil-1553.com/m4kh009 
M4KCan and M4K825Can module: http://www.mil-1553.com/m4kcan 
M4KETH module: http://www.mil-1553.com/m4keth 
M4K717 module: http://www.mil-1553.com/m4k717 
M4K708 module: http://www.mil-1553.com/m4k708 
M4K1553MCH module: http://www.mil-1553.com/m4k1553mch 
EXC-1553UNET/Px: https://www.mil-1553.com/1553-unet 
DAS-429UNET/RTx: https://www.mil-1553.com/429-unet 
MCH card family: https://www.mil-1553.com/mch-family 

Select the packages that you need, and click on each one to download.
If you cannot find what you are looking for, please send an email request to Technical
Support, at URL www.mil-1553.com/technical-support .