H2-DM1 and H2-DM1E Revision History

GA  Version OS Version Date Description of Problems / Additions / Changes




TimeSync now include the Time Zone.

Added additional failure information when CPU drops out of RUN mode.

Added DST72 ($FreePackets)




Fixed a problem that could sometimes prevent systems with Ethernet I/O Slaves from returning to RUN mode after a power-cycle. The CPU could wrongly determine that one or more of the remote slaves were not online after the CPU was power-cycled. This would require the CPU be manually put back into RUN mode with the mode switch.

The Modbus/TCP Read (MRX) now allows use of unit ID 0.




Fixed a problem where the CPU would wrongly return an error to a C-More panel when using the Symbolic Driver to write to a String tag.




Fixed a problem in the Modbus server where communication through unstable networks ( like cell modem, radio modems, etc. ) could leave the server in an unresponsive state.




Fixed a problem in the C-More Symbolic Driver (and REST API) that prevented proper indexing of blocks of structures.

Fixed a problem when using MEMCLEAR of a nested structure.

Made the following additions:

Added DST156 ($QueueFull) - used by FIFOLOAD and LIFOLOAD.




Fixed a problem in SGRSTR (Stage Reset Range) where some of the selected Stages would not be enabled.




Fixed a problem in the C-More Symbolic Driver that would only return the first 4 bytes from a String in a structure.

Serial Port configuration (RS-232 vs RS-485) now propogates correctly if you change the PLC CPU type.




Nested Structures with User Data Types.

Added DST412 ($Assert code)

Added DST413 ($ForceMinScan).

The CPU will now reset the Ethernet core if the Ethernet port ever becomes unresponsive for a sufficiently long time.




Fixed a problem when using the DLRX/DLWX through an H2-ECOM100 module that caused these instructions to return a "Unknown error (-2)".

The FmtString function in STRPRINT now properly supports negative timer accumulator values.




Termination logic is now executed for the entire project on Run -to- Program mode changes.

Added termination logic processing to the Halt Program or Task (HALT) instruction.

Fixed a problem where termination logic was not being executed for Tasks configured to be recurrent at a non-zero time interval.

Fixed a problem where termination logic was not being executed for RESTART of a Task.




Added the following instructions:

DMLOGGER - Broadcast String to DMLogger.exe

SGRSTI - Indexed Disable Stage

SGSETI - Indexed Set Stage

TESTNUM - Classify Numeric Value Types




Fixed a problem when using the Do-more Symbolic Driver (Ethernet or Serial) in a C-More panel to reference a bit-of-word tag, (e.g. D100:1).




Fixed a problem that prevented the -3 and 0xUT analog modules from operating properly in an Ethernet I/O expansion base.

Fixed a problem that prevented BX-04DA-1/-2B modules from working in Ethernet I/O expansion bases.




Fixed a problem in the TIMEPROP instruction that could cause the output to glitch.




Fixed a problem in the serial port driver that would inadvertently clear any remaining data from the input buffer when a STREAMIN instruction is executed. This affects the on-board serial port  and any of the SERIO modules because they all use the same serial port driver.




Added the following instructions:
STRCOPY - Copy String
STRCOPYR - Copy Range of Strings
RANGECHECK - Value In/Out of Range

PID instruction can now initialize the Error Deadband value of the PID's associated structure.




This is the minimum boot loader and firmware versions required for Rev 8A hardware. This firmware and boot loader will work in previous hardware versions, but is required for all hardware versions later than 8A.



Fixed a problem that would cause the CPU to crash if a Program or Task that is configured to be retentive contains a looping instruction (For / Next, Do / While, ...) that doesn't complete before a power failure.




A few minor bug fixes but mostly to stay in sync with BRX firmware version.




Added the following instructions:
FIFOLOAD - Load First In / First Out
FIFOUNLOAD - Unload First In / First Out

LIFOLOAD - Load Last In / First Out
LIFOUNLOAD - Unload Last In / First Out




Fixed a problem that would cause the Modbus/TCP server to fail if the client impropertly requested more than 125 words in a single request.




A few minor bug fixes but mostly to stay in sync with BRX firmware version.




Added support for the new DURApulse GS4 drive through the GS-EDRV100 as an Ethernet Remote I/O Master. This feature also requires Do-more Designer v2.2 and GS-EDRV100 firmware v6.0.2.




Added the following instructions:
COPY - Copy Data
DEBOUNCE - Reduce Discrete Input Chatter
FLASHER - Cycle Output On / Off
TIMEDOUT - Timed Output




Added a 1 MB RAM File System and a suite of FILE instructions to manage files on the RAM file system. There's also a file system browser in Do-more Designer v2 that is used to mange the contents of RAM file system from the PC running Do-more Designer.

Changed the EMAIL instruction so that it can now include a file attachment from the RAM drive.

Added FILELOG instruction for data logging to a file in the RAM file system.

Added Subroutine code-blocks and the CALL, END and ENDC instructions that are used to run them.




Fixed a problem that would cause the Ethernet port to be come unresponsive.




Fixed a problem when accessing 125 Registers with Modbus Network Write (MWX) or Modbus Network Read (MRX).




Added EIPMSG - Send EtherNet/IP Message instruction to have a Do-more CPU with on-board Ethernet port be EtherNet/IP Explicit Message Client.

Added EtherNet/IP Explicit Message Server setup to the CPU Configuration to have a Do-more CPU with on-board Ethernet port be an EtherNet/IP Explicit Message Server.

Added RX - Do-more Network Read instruction to have a Do-more CPU with on-board Ethernet port read data from other Do-more CPUs with on-board Ethernet ports.

Added WX - Do-more Network Write instruction to have a Do-more CPU with on-board Ethernet port write data to other Do-more CPUs with on-board Ethernet ports.

If the result of a MATH - Calculate Expression is an array reference, you can now enter a full MATH expression for the array Index.

DEVREAD - Read Device Register and DEVWRITE - Write Device Register instructions can now read and write the POP3 Server IP Address and the SMTP Server's Timeout value.




The DM1E CPU can now be configured to power up in RUN mode if the onboard battery is missing or if the battery voltage is too low to maintain the retentive memory through a power cycle.

Fixed a buffer overflow problem when using multiple Email instructions.

DNS Lookup instruction will now return an error if the DNS Lookup operation succeeds but the TCP/IP address is




Made a change to the Watchdog Timer logic to eliminate the potential for spurious watchdog timeouts.




If the Onboard Serial port buffer accumulates more than 1023 bytes of data then $SerFifoOverflow (ST17) will be ON. As data continues to flow into the buffer the oldest bytes will be purged. The serial port's RX LED is now more indicative of activity on the port.

If an attempt to change the PLC mode fails then $ModeChngFailed (DST410) will contain the failure code.

If a runtime exception occurs the CPU will store the return address of the last call before the exception in $DebugTrapAddr (DST411). A non-zero value in this location indicates that a runtime exception occurred and this value may be useful to the Do-more Designer developers.




Added UDCG - Global Up/Down Counter instruction.

Added TMRAG - Global Accumulating Up Timer instruction.

The DEVREAD - Read Device Register and DEVWRITE - Write Device Register instructions can now read and write the String and Numeric parameters in the SMTP Server's configuration.

Added the IPADDR format specifier to the Format Integer (FmtInt) scripting function for use by STRPRINT - Print to String and EMAIL - Send Email instructions.

Added support for Function Code 22 (Mask Write Register) to the Modbus/RTU Server and Modbus/TCP Server.

SUBSCRIB properly handles Swap Bytes of WORD sized element with a range larger than 1.




Added DST29 ($PLCType).

Added PartNum and SerialNum system strings.

DEVREAD can the serial port configuration at runtime.

DEVWRITE can change the configuration of the onboard serial port and a SERIO module at runtime.




Added Ethernet I/O Master which can use H2-EBC100, T1H-EBC100 and GS-EDRV100 as Ethernet I/O Slaves.

Added Module Configurations for Intelligent Analog modules.

Added ability to enable a Secondary Ethernet Programming TCP/IP port number for use by Do-more Designer.

Added GSREGRD and GSREGWR instructions to Read and Write parameter data in a GS1, GS2, or GS3 drive through a GS-EDRV100.

The Input Leg of the STRPRINT, STRFIND, STRSUB, STRCMP, and DATAINFO instructions can now be configured as Power Flow Enabled or Edge Triggered.

Added PING, DNSLOOKUP instructions.

The new Gate Array fixed a problem in the Math Stack with writing Real numbers to integer locations if the write operation was the first instruction in $Main.

Fixed a problem in the initial update of the Rate of Change Alarm (ALRATE) instruction.

Added <NUL> character removal to Trim Whitespace (STRTRIM) - in addition to <CR>, <LF>, <TAB>, etc..

Accumulators of Down Timers have a limit of 0; Up Timer Accumulator have a limit of 2,147,483,647; accumulator values will no longer roll over, which were turning off the Timer's .Done bit.

Fixed a problem where the K-Sequence serial protocol would not recognize Slave IDs other than 1.

Improved performance of the handlers for Guest Protocol memory ranges with DirectLOGIC and Modbus slave/server protocols.

Fixed a problem in the validation for Copy Memory (MEMCOPY) instruction.

Better handling of "Termination Scan" between the Enable Task (ENTASK) instruction and corresponding TASK code-block.



Fixed a problem that only occurs when working with projects that exceed 32Kb in size. The problem was that memory above the 32Kb boundary was not correctly being erased.

Fixed a problem that did not allow the termination logic for a Task to run if the Task completes and is re-enabled on same PLC scan.

Fixed a problem that only allowed external clients access to locations in the DLV range from DLV0 to DLV7777. The range of acceptable requests now correctly extends from DLV0 to DLV37777.

Fixed a problem where the K-Sequence serial server was always using 1 instead of the configured address.

Fixed a problem where the Rate of Change Alarm (ALRATE) instruction did not correctly set the initial state of its data elements.

Fixed a problem that caused the Copy Memory Range (MEMCOPY) instruction validation would fail when bit arrays are used.

Fixed a problem that caused the Copy Memory Range (MEMCOPY) to incorrectly copy structures.

Fixed a problem that caused the Clear Memory (MEMCLEAR) was not working correctly with certain bit ranges

Changed Scale Value (SCALE) instruction to internally use 64-bit math for integers.

Fixed a problem in STREAMOUT, STREAMIN, STRGETB, STRPUTB, PACKETIN, and PACKETOUT instructions which, in certain cases, would cause them to incorrectly perform range checks on array references.




Fixed a problem when using the F2-02DA-2 or F2-02DA-2L in bipolar data format mode with negative data values.

Fixed a problem in the K-Sequence Server so that writes to BIT locations operate properly.

Fixed a problem in the Memory Configuration if the block size of DLX, DLY or DLC exceeded 1024.

The SCALE - Scale Value instruction now internally uses 64-bit math calculations to minimize math overflows.

Made a change to the backplane interface for the H2-ECOM100 to better support native data types.




Added $PgmModeRestart (ST15) to distinguish a powering up in Run mode versus a Program mode -to- Run mode transition.

Changes the built-in Program $Main so that it always restarts regardless of whether it powers up in Run mode or goes through a Program mode -to- Run mode transition.

Fixed the KSequence driver handle a problem in accessing KSequence Server memory through an ECOM100.




Updated the error message for CTAXCFG (CTRIO2 Axis Configuration) instruction.

Fixed problem where attempting to access a memory location in the K-Sequence Server memory (DLX, DLY, DLC, DLV) that is NOT in the current System Configuration would generate a memory access error. For example, if the K-Sequence memory is configured for the range of DLV0 through DLV1777, and a K-Sequence request for DVL2000 is received, a memory access error is generated.

On a Program Mode -to- Run Mode transition the elements in Force table will no longer be set to the values in the force table if the Force table contains entries but the Force table itself has been disabled.




Initial Release.