ISaGRAF Target Kit "Readme"

This README.HTML file documents the changes made to the ISaGRAF Target Kit, a product of Industrial Control Links, Inc. of Auburn California, USA.




v6.14


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • Changed ComRdBts 'C' Function block to ComRdBuf to eliminate naming conflict with the ComRdBts 'C' Function on a previous install. This conflict does not occur on fresh installations.
  • Fixed problem in Modbus Slave and Bricknet driver where response to a Status or Coil query could send back invalid data bytes. Problem does not affect most Modbus master drivers.


v6.13


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • Fixed problem where serial I/O was taking two control program scans per update.
  • Changed ComRdBts 'C' Function to a function block. This allows ISaGRAF to return both the receive byte count and the data in one call.
  • Increased com buffer size to 1K for a serial ISaGRAF debugger port. When using a large number of floating point variables, the debugger would not be able to complete a full transfer without overflowing the buffer.
  • Removed references to OEM boards for the EtherLogic. They were included in the library files but were not implemented in the kernal library. The EtherLogic uses the native ScadaBuilder I/O configuration interface instead.



v6.12


Summary

    Maintenance and feature release.

New Features/Changes

  • Added FTP support for ScadaBuilder files.

Fixed Problems

  • Fixed bug where email would not work with another protocol (such as FTP) on a dialup link. Each netSession maintains its own value for the 'deviceType'.
  • Fixed bad enum in RegWriteString. Check error would report the wrong function.
  • Fixed function name lookup problem in check errors where it was possible to use the name pointer before inititializing it.



v6.11


Summary

    Maintenance release.

Fixed Problems

  • ISaGRAF windows called from ScadaBuilder for the first time after installation would not display properly.


v6.10


Summary

    ScadaBuilder support update.

New Features/Changes

  • Updated for compatibility with ScadaBuilder v2.00. Support added for:
    • Register buffer formating
    • Local events/alarms
    • Log events/alarms
    • TUI alarms/logs
    • Setting of trigger scan rate.
    • Setting of counter scan rate.
    • Setting of serial I/O WDT.
    • Disable of network sessions.
  • Installer now modifies ISaGRAF configuration file (isa.ini) to enable retained variables to have initial values.
  • Added new functions/function blocks:
    • IOCtrl (enables/disables I/O scan)
    • DateWr (sets the system time and date)
    • TimeWr (sets the system time)
    • DateRd (reads the system date and time)
    • NPHandle (Gets net port handle from port name)
  • Support for EtherLogic using new high-speed internal serial I/O protocol. This eliminates the need to set up Modbus to get at the EtherLogic I/O. Requires ScadaBuilder to take advantage of this feature.
  • DI counters counter can now be mapped to registers.

Fixed Problems

  • TUI no longer opens the COM port if already in use.
  • TUI only closes the COM port if it opened it.
  • Fixed bug when determining hop count of routed messages.
  • Fixed bug when setting scaling clamp values.
  • Fixed memory overflows when allocating large trigger blocks.


v6.02


Summary

    Maintenance release.

New Features/Changes

  • Updated for compatibility with ScadaBuilder v1.13.

Fixed Problems

  • None.


v6.01


Summary

    Maintenance release.

Fixed Problems

  • The ELOGIC sample project (for EtherLogic controller) had a few problems that have been corrected:
    • Changed the project comment to match what the application does.
    • Changed TUI header from HVAC to Etherlogic Toolbox.
    • Changed AO callout to Vx1000 (10 volts = 10000)
    • Changed voltage mode AI callouts to Vx1000 and Vx1000w/Isrc (were x100 which was not correct)
    • Changed current mode callout to mAx1000 (was x100 which was not correct)


v6.00


Summary

    Support has been added for ScadaBuilder, plus a number of other features and a few fixes. The Target kit now applies to multiple ICL controllers, not just the ICL-4300.

New Features/Changes

  • Requires a BIOS with "library version" of 3.41 or later.
  • The slave address or IP address offset can now be read from a DIP switch on ICL controllers that have this hardware feature or can be read from a register.
  • ISaGRAF applications can now use configuration files developed using ScadaBuilder. ESP-style configuration files are still supported as well (either by themselves or in combination with ScadaBuilder).
  • Support for using Ethernet for the debugger link was added. A new run-time kernel command-line switch option (-t=tcp) enables Ethernet (Sockets and the packet driver must also be loaded).
  • When the controller is acting as a dialup FTP server, and there is no activity within a timeout period, the modem connection is now terminated automatically to allow the modem to be used for other activities (such as dialing out alarms). The timeout is specified by the NetSession/sesTimeoutSec configuration file parameter. The default is 30 seconds (you may want to increase this value when using the controller in this fashion).
  • Support for sending email messages based on triggers has been added (this is not supported in ScadaBuilder yet, but is supported in the ESP-style configuration file).
  • Support added for new I/O boards: 43-AI16-16, 43-AI8-16 and 43-AO8-12I.
  • Added support for TUI over Telnet (Ethernet-only).
  • Added PPP dial-up support.
  • TUI Page Links can now use an associated register to disable the link based on the register value.
  • Added support to configure an FTP client status buffer.
  • Changed the log file name from "icl4300.log" to "system.log".
  • Total application size (TIC code plus ESP/configuration resource file) had been limited to 64k. This has now been increased. TIC code may now be up to 64k by itself, plus the ESP file can be as large as available RAM on the target controller allows.

Fixed Problems

  • Several pointers were not being nulled properly when an application was shut down. This could cause an application to lock up when restarted from the debugger or when a new application was loaded.
  • The controller would not answer incoming modem connections when set up as an FTP server (like the sample application "FTP2").
  • TUI2 sample project was reporting an error for the [TuiValList] ESP record: "Invalid variable type".
  • Added small delays to RTC initialization to fix initialization failing at high temperature.
  • Fixed config file error when parsing unquoted '#' characters in a 'format' parameter value.
  • Fixed memory leak -- if multiple modbus master sessions were attached to one port, buffer would get allocated too many times.


v5.02


Summary

    Maintenance release.

Fixed Problems

  • The TUI2 sample project (and other user projects) were reporting an error for the [TuiValList] record: "Invalid variable type". This turned out to be a C compiler bug -- the code was incorrectly interpreting the variable as a MSG (message) type.


v5.01


Summary

    Maintenance release.

New Features/Changes

  • Added regCheck parameter to the [Options] record to control the level of checking performed when parsing the configuration file. The possible values for regCheck are:

    • strict - flags Any references to non-existent variables (registers). This is the default.
    • tolerant - flags only references to non-existent variables that are at the start of a block, or single variables.
    • none - does not flag any references to non-existent variables.

    Example:
      [Options]
      regCheck=tolerant    ; set level to tolerant

Fixed Problems

  • Modbus routing was essentially non-functional. The routed response delay was being calculated incorrectly, resulting in very slow routings, especially at lower baud rates. Response messages we not being reliably routed because of an error in how the routing table entries were being interpreted. Modbus routing was broken since the beginning.
  • BrickNet routing was non-functional. The router was generating CRC's incorrectly, resulting in the destination unit rejecting the message. This was broken since v4.50.
  • The Modbus ASCII Slave protocol driver was not processing Preset Multiple Register (0x10) messages properly. The byte count was not being extracted from the incoming message, leaving the variable uninitialized and resulting in too many or too few register values being stored. This was broken since v5.00.
  • Leading zeros on numeric values in the configuration file were incorrectly causing the configuration file parser to interpret the numbers as octal -- they are now forced to decimal. This was broken since v5.00.

v5.00


Summary

    Major new feature release.

New Features/Changes

  • Data & Alarm Logging
    • Added data and alarm logging. Automatically logs data records based on triggers and alarm records based on change of alarm state. Features include single or multiple files, configurable file format and maximum size, and time/date stamp.
    • Removed 'datalog' sample application and added 'log1' and 'log2' which illustrate the new (and easier) way of doing data logging.

  • TUI (Textual User Interface)
    • Added the ability to display data and alarm logs on a TUI.
    • The Page Up and Page Down keys now work in the TUI.
    • Added alarm properties that can be applied to TUI alarms or alarm logs.
    • Signed, unsigned and hex modes are now supported for TUI fields.

  • Communications
    • Incoming PPP dial-up modem connections are now supported when using TCP/IP.
    • Additional modes and flexibility are now available to send & receive "non-standard" data types over Modbus protocol. You can now set up the ICL-4300 to deal with almost any representation.
    • A list of phone numbers can now be used for alarm dialing, with configurable control over how the system advances from one number to the next.
    • Improved Modbus communications performance, especially when accessing a large number of boolean variables in a single message.

  • Error Messaging
    • Improved error checking and reporting while parsing the config file.
    • The system event log mechanism has been changed so that a fresh log file (icl4300.log) is created each time the application starts. The previous log file, if any, is backed up to icl4300.bak. This makes it easier to find applicable error messages, and reduces the likelihood that the log will fill up and stop recording.

  • Miscellaneous
    • The Status LED and the reboot signal can now be mapped to Boolean variables.
    • The configuration file parser has gotten more strict about accepting floating point numbers where an integer is expected. The sample files have been changed accordingly.
    • The configuration file parser has gotten more strict about requiring all variables in referenced blocks to be defined in the dictionary. This change in behavior is designed to help you more quickly locate errors.
    • Added I/O breakouts in comment headers of sample files.
    • The [FORMAT] record now left justifies buffer register types that are inserted into the format string.
    • The installer now installs the ICL sample applications into a separate project group (ICLSMP).
    • Low-level functions for reading/writing hardware I/O ports have been added, to support custom I/O boards and hardware.
    • The installer has been changed to optionally clean the archive directory (C:\ISAWIN\ARK) in order to avoid reinstallation of residual libraries/projects left behind from earlier installations.

Fixed Problems

  • [Defines] entries can now be nested.
  • BrickNet now has the ability to receive messages while waiting to access the media when sending a command.
  • The maximum register count for Arcnet messaging was being calculated incorrectly, allowing too many variables to be specified in a [NetEvent].
  • Error messages are now displayed cleanly to the TUI.
  • The communication failure status now properly reflects success/failure over a dialup connection.
  • The presence of Arcnet hardware is now detected before the system tries to install the Arcnet device driver.
  • DTR is now cleared when the application exits in order to hang up any attached modem(s).
  • TUI autoedit feature was not working properly.
  • Fixed Arcnet device address to eliminate unreliable Arcnet device communications.
  • The memory allocation system was improved to automatically eliminate memory leaks in the ISaGRAF kernel.
  • When you ran an application that used the day_time function and then ran commands via the remote console prompt (isa -r), the runtime kernel would crash.
  • If the file system was too full to accept the downloaded application, no error message was generated.
  • If you tried to transfer an application file larger than 64K, the kernel would crash.


v4.50


Summary

    Major feature release, including Ethernet, Arcnet, Modbus/TCP and HotLink support.

New Features/Changes

  • HotLink
    • Added HotLink operator interface panel support, via TUI.
    • Added local alarm annunciation on the HotLink beeper, via TUI.

  • Textual User Interface (TUI)
    • Added TUI value lists and TUI buttons.
    • Added auto edit feature to TUI.
    • Ctrl+N and Ctrl+P are now used for next and previous menus in the TUI.
    • Ctrl+S (or '*' on HotLink) is used for auto selection of TUI value list.
    • Ctrl+A is used to set a TUI register block to the value of the currently selected register.
    • Made attributes and colors configurable on the TUI.
    • Changed TUI key scan time to 50mS from 100mS.
    • TUI now supports both hierarchical and flat menu structures.
    • TUI can now navigate up, down, left and right.

  • Communications
    • Added TCP/IP Support for Ethernet.
    • Added Modbus/TCP Master protocol support.
    • Added FTP Client and Server support.
    • Added Telnet Server support.
    • Network statistics and comm fail information can now be mapped to variables.
    • Moved response delay parameter from network sessions to network ports.
    • BrickNet always routes using routing table from session that monitors.
    • Added support for Arcnet LAN controller.

  • Other
    • Increased configuration file (ESP) parsing performance.
    • Syslogs for net event errors now display the error value.
    • Net events with only a startup trigger are now allowed by parser.
    • Installer has been improved.

Fixed Problems

  • Modbus master can now rewind and re-evaluate received characters as invalid message are rejected. This is in support of systems that use store and forward.
  • BrickNet can now respond to messages while waiting to send a command or during an event or cycle gap.
  • Removed "check" error on pager ID when using a numeric pager.
  • Fixed problems with session-based address-qualified triggers and trigger hold-off feature.
  • Fixed application shutdown operation.
  • Fixed handling of spurious interrupts on IRQ7 (INT0F).


v4.01


Summary

    Minor maintenance release.

New Features/Changes

  • Added regMode=autoSigned option for NetSession record in configuration file. This sets the Modbus communications mode so that registers/variables are treated as signed numbers, instead of unsigned (as with regMode=auto).

Fixed Problems

  • None.


v4.00


Summary

    Major release, adding support for the following new features:
    • Voice playback and recording using local or dial-up connection.
    • Alarm processing, with annunciation using voice or digital outputs.
    • Dial-up modem data communications.
    • There is an up-to-date Target Kit Manual that goes along with this release.

New Features/Changes

  • General
    • Based on newer kernel source code (v3.23) from Transysoft.
    • Many new sample applications have been added to illustrate new features.
    • Supports shell feature on debugger COM port. Use "-r" command line switch when starting ISA.EXE to enable this feature. Enters command prompt mode when three carriage returns are received on debugger port. Exit command mode by typing "exit" at the command prompt.
    • Information printed to the console regarding free memory has been made more useful.

  • Alarm Processing
    • Alarm records may be created using a configuration file.
    • Alarm and alarm acknowledgement conditions are defined by Trigger records.
    • Alarms may be annunciated using local voice messaging, voice messaging over a telephone or using a digital output.

  • Voice Recording/Playback
    • Support for the modem and microphone voice recording/ playback hardware options has been added.
    • Voice may be handled automatically using a configuration file.

  • New configuration file record types
    • In conjunction with other changes, several new record types have been added. The new record types are listed briefly below:
      • Format - generates output to a message variable based on a format string and variable value fields
      • LocalEvent - stores a value to a variable based on a trigger
      • VoiceMsg - defines an individual voice message recording
      • VoiceSeq - defines a voice message made of a sequence of individual recordings and variable value fields
      • Alarm - defines an alarm, including trigger and acknowledge conditions
      • NetAlarm - defines how an alarm is to be annunciated via numeric or alphanumeric pager
      • LocalAlarm - defines how an alarm is to be annunciated with a local digital output
      • Vui - defines a VUI (Voice User Interface)
      • VuiMenu - defines a menu for use in the VUI
      • VuiReg - defines a register for use in the VUI

  • Communications
    • NetSession defaults have been changed (respTimeoutMs: 1000 => 3000, respRetry: 3 => 2).

  • Misc
    • If NetPort is not specified, TUI now defaults to console.
    • TUI now allows lower case in field entries.
    • The TUI disables the 'P' key to edit the page number if the showPageNum flag is FALSE.

Fixed Problems

  • Target Kit did not install properly on top of v3.30 Workbench -- sample projects and libraries did not install properly because of a change in how the archiver works.
  • Memory leaks and lockups related to application shutdown and startup.


v3.00b7


Summary

    Beta maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • A command line switch was added (-p=off) to disable Power Fail Interrupt (PFI) detection so that the ISaGRAF kernel can be run on older hardware (earlier than rev F backplane). If the new kernel is run on old hardware and the PFI is disabled, the kernel does not allow retained variables because NVRAM is not reliable without the PFI enabled (an error message is generated).


v3.00b6


Summary

    Beta maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • When an application was re-downloaded or re-started, the memory location used for retained variables would change. Now it remains the same.
  • Power fail detection is now enabled, to prevent the CPU from writing to RAM as the power is dropping. This fixes a problem where retained variables would sometimes be corrupted. Note that rev F or later of the ICL-4300 backplane (board number B0190006) is required for this to work properly.


v3.00b5


Summary

    Beta maintenance release.

New Features/Changes

  • Improved error message when an unknown Trigger name is referenced in a NetEvent record.
  • The Debug link baud rate was changed from 19200 to 9600 in the sample projects (19200 is unreliable on COM1/COM2 of the ICL-4300 when running the ISaGRAF kernel).

Fixed Problems

  • Stack overflow could occur when timer or delta triggers were created. Increased stack sizes for timer and delta trigger threads.
  • Variables in TuiField records improperly generated warning messages.
  • System would not switch between multiple NetSessions on the same port.
  • A missing 'blockSize' parameter on a 'read' or 'write' NetEvent would not generate an error message, but would default to 0 and generate messages with zero-length data.
  • Trigger records were being improperly rejected.
  • Y2K - error logging function did not print year properly to error log file when year reached 2000.


v3.00b4


Summary

  • Beta maintenance release.

New Features/Changes

  • Xinu multitasking kernel now prints free and reserved memory on startup.
  • 3 new trigger types have been added (netSes, netSes/ netAddr & tui). The triggers are activated when variables are written to by communications or the TUI.
  • Fixed bug in calculation of NVRAM base addess (specifying 512K would start at address 0x7fC00 which is standard RAM).
  • A flag has been added to the network session indicating whether or not broadcast messages should be accepted. The default state for this flag causes broadcast messages to be ignored, which provides a minor performance improvement.

Fixed Problems

  • Fixed Modbus register byte swapping problem.
  • Made default regMode set to 'auto', instead of 'MsbFirst'.
  • It was possible for the Modbus RTU Slave driver to reject good messages if they were preceded by noise or messages destined for a different slave. The driver could "sync up" with data or noise and begin to interpret the stream as a message. The CRC would then fail and cause the data to be discarded, possibly discarding some or all of a subsequent good message. Now, if a message is rejected, the driver backs up, throws out the first byte and attempts to re- interpret the remaining data as a message.
  • Modbus RTU Slave bad message rejection was improved by adding cases for illegal length and illegal broadcast message type codes so that the message or noise can be discarded sooner.
  • Modbus RTU Slave bad message rejection was further improved by checking the register count against the byte count for FMC and PMR messages. This eliminates a case where the communication driver was trying to process the data portion of a message addressed to another slave as a valid message for itself (the message is now rejected sooner, which allows the slave to more quickly recognize a following good message).
  • If a character gap is detected in the Modbus RTU Slave driver, instead of throwing away any received bytes, the receiver state machine is reset and the received bytes are reevaluated beginning at the next possible start of message byte. This improves the ability to detect good messages embedded in noise or preceded by messages to other slaves.
  • Broadcast messages were not being handled properly in the Modbus Slave RTU driver. If a valid broadcast message was received, a response would be generated (none should be). Now responses are not generated.
  • Increased the default net session character gap timeout from 500 ms to 5000 ms to account for large delays in UserProgMain (if user application code is slow). This timeout is used in the Modbus slave driver to restart the receive state machine if there is a large gap in the incoming data stream.
  • Made various event state changes thread safe.


v3.00b3


Summary

    Beta maintenance release.

New Features/Changes

  • The Target Kit Manual is not included on the distribution disk anymore - it can be downloaded from our website if desired (www.iclinks.com).

Fixed Problems

  • When reading voltages in the range -10/10V from an #43-AI16-14 board using raw mode, the values would get clamped at 0 and 4095. The values will now show the full range range from -8092 to 8091.
  • When physical DOs were updated the channels were being reversed.
  • When a missing "reglink" was detected (i.e. Modbus message received and no register type was associated with the message type), no error message was logged.
  • The board type code associated with a #43-AO16-12V board was incorrect, making it so the board could not be "opened" by the application. If you are using one of these boards in your application, remove the board and add it back in to the ISaGRAF I/O rack to get the updated definition.
  • The help text associated with C communications functions now list COM7.


v3.00b1


Summary

    Beta release.
    Major maintenance release, with BrickNet protocol added.
    Requires BIOS version 3.01 or later.

New Features/Changes

  • I/O
    • Added Support for bipolar and multi-mode I/O boards.
    • Added support for dual calibration and raw modes on analog boards. Polarity of filter setting bits has been reversed. This requires users to remove boards from apps and add them back in again.
    • Added Analog Input averaging feature. Can be set either through configuration file ([OPTIONS] aiAverage=) or control function (AIAve).

  • Communications
    • Added support for multiple Modbus register data encoding/ decoding modes ([NETSESSION] regMode=auto, msbFirst or lsbFirst). "Auto" mode is equivalent to normal operation in previous release.
    • ICL ASCII, Optomux and Ultimeter protocols are no longer supported. We found that no one was using these protocols, and it was causing us a lot of extra work to try to maintain them as made changes to the system. If you really want to run one of these protocols, contact Technical Support, and we can give you the C source code from the last supported release for you to integrate into your application code.
    • Communications system improved to allow the definition of more complex triggers.
    • BrickNet protocol support added.
    • Message routing for Modbus and BrickNet have been added.
    • Communications status and statistics functions are now available.
    • Alternate network session support has been added.
    • Receive and transmit buffer size parameters were moved to the network port, from the network session.
    • Added support for nine-bit communications.
    • Network port, event and session names are now case insensitive.
    • Added communication functions based on net ports defined in the configuration file (NpOpen, NpClose, NpPktSnd).
    • Added function ComSet to change COM port settings without re-opening port.
    • The interrupt priorities were rearranged, to give COM1/COM2 highest priority. This allows COM1/COM2 to handle higher baud rates.
    • The serial communications ISR and timer ISR were optimized for speed, increasing overall efficiency and increasing highest acceptable baud rate on COM1/COM2 (which have no FIFOs).
    • Enabled transmit and receive FIFO usage on COM3-COM7 to reduce interrupt rate and allow higher baud rates without receive overruns.
    • Added support for modem on COM7, using low-level read and write serial communication functions.
    • Added "nine-bit" communications support.

  • Configuration File
    • Additional error checking has been added to the file parser.
    • Many new record types and keywords have been added and/ or altered to accomodate these changes.
    • Added parameters to configuration file for analog input averaging, digital input inversion and system log message display.

  • Miscellaneous
    • A powerful new feature was added called the Textual User Interface, or TUI, which allows you to set up a terminal mode user interface for viewing/ changing information stored on the ICL-4300.
    • Support added for Super Size PCOS (flash memory and NVRAM).
    • Added support for debug/ship version compilation.
    • Improved overall performance by decreasing time spent doing hardware I/O operations.
    • System log messages now output to the console, in addition to the log file.
    • Voice and Tone functions have been added, but not fully tested.
    • Code is now compiled to use 386 instructions, for increased performance.

Fixed Problems

  • Fixed scaling error with AI16 IO boards in 0to20mA mode. Values would scale to large value when the current went negative.
  • Fixed BrickNet communications error. When waiting for a response to a command and a command from another node is received, we would respond and return the comm state back to idle. When our response finally arrived we would reject it since we were no longer in the receive response state.
  • The creation of Modbus master net events are now rejected when an AI or DI register is specified as the destination for a write.
  • For long messages(>200ms), the communications system could disconnect early. This could cut off the tail end of RS-485 transmissions, depending on how the Trail Delay was set.
  • A memory leak was fixed that would occur if the network system was shutdown and re-started.
  • The RTS signal on COM1 was not enabled.
  • The response delay feature was not working.
  • Serial port control signal access functions did not work unless the port was open. Now they work even when the port is closed.
  • Communications lockups could occur at high baud rates if multiple ports were used simultaneously.
  • Serial ports opened by application (using function ComOpen) were not being automatically closed when the application was terminated.


v1.30


Summary

    Maintenance release.

New Features/Changes

  • Variable "Network Addresses" as defined in the dictionary, are now interpreted as decimal numbers by default, instead of hexadecimal. Can be set to hex mode, using the new -v=hd switch on isa.exe.
  • New functions were added for communications:
      ANA ComRdBts( ANA port, MSG bytes, ANA max );
      ANA ComWrStr( ANA port, MSG string );
      ANA ComWrBt( ANA port, ANA byte );
      ANA ComWrBts( ANA port, MSG bytes, ANA len ); (renamed from ComRdBt)
      BOO ComXmtEm( ANA port );
      ANA ComClRcv( ANA port );
      ANA ComRts( ANA port, BOO state );
      ANA ComDtr( ANA port, BOO state );
      BOO ComCts( ANA port );
      BOO ComDcd( ANA port );
  • New function was added for file open in append mode:
      ANA f_aopen( MSG filename );
  • New types "Ana" and "Boo" have been added to the Configuration File, to more naturally correspond to the Analog and Boolean variable types in ISaGRAF.
  • Changed mbmaster & mbslave sample projects: updated config files to match new register nomenclature, changed Configuration File paths to standard application directory.
  • Added PID sample project.

Fixed Problems

   Modbus communications on the debugger port:
  • ROS (Read Output Status, code 1) message requesting greater than 255 values was not handled cleanly - only LSB of number was used. Changed to look at both LSB and MSB, trap all requests > 255 (rest of code currently can't handle anything bigger, so limit is enforced).
  • If a read/write referenced a register with no corresponding variable, the response was invalid. The system now responds, with 0 data for non-existent register reads, and no effect for writes.
  • Register numbering was off by one, according to the Modbus specification and compared to most implementations. (example, register 40010 in WonderWare referred to analog register 9 in ISaGRAF). Now there is a one-to-one correspondence.
  • The system would not respond to RIS (Read Input Status, code 2) and RIR (Read Input Registers, code 4) messages, which are quite commonly used in Modbus. The implementation was changed so that these messages work, and refer to the same set of variables as ROS (Read Output Status, code 1) and ROR (Read Output Registers, code 3).
  • The variable type was not properly considered when reading/writing registers. If the variable type did not match the message type, incorrect messages were generated and incorrect values were written. Now if the types don't match, a 0 is returned on a read, and nothing is done on a write.