What's new for the tET/tPET RevB series Ethernet I/O modules.

This firmware is designed for "tET/tPET RevB" series only, 
not for "tET/tPET" without "RevB" mark.
Make sure there is a "RevB" mark after the model name on the front cover.

The "tET/tPET RevB" and "tET/tPET" series are using different MCU, 
so the firmware are not compatible with each other. 


===========================================
Aug.6, 2024, V2.4.3

Add : Auto off support Milliscond settings.
Add : Digital Counter support Rising/Falling/Both.
Fix : Modbus TCP does not work if IPv6 SLAAC address is assigned.
Fix : Can not using FC16 to write to shared memory.

===========================================
May.05, 2023, V2.4.2 

Chg: Reply to the eSearch utility with the IP 0.0.0.0 if the module is still 
     waiting for a DHCP IP to be assigned.

Fix: Reset TCP when SLAAC address changes instead of state changes.
 
===========================================
Sep.23, 2022, B2.4.1 

Fix: Configuration may not save correctly.

===========================================
Sep.06, 2022, B2.4.0 

Chg: Supports up to 16 pair-connection settings.

     The following Modbus addresses can be used to read the pair-connection states 
	  (read-only). Low-part 16 bits are available, while the high-part 16 bits are 
	  reserved.
	  
     Connection States: 0 = None/UDP, 1 = Connected.
		        Bit-address (0x, 1x) = 2936 - 2967 (32 bits / 32 channels), 
			Register-address (3x, 4x) = 2996 - 2997 (2 registers / 32 channels)

	  Data updated: 0 = Failure, 1 = Success.
		        Bit-address (0x, 1x) = 2968 - 2999 (32 bits / 32 channels), 
		   Register-address (3x, 4x) = 2998 - 2999 (2 registers / 32 channels)

Add: Provides 512-byte (256-register or 4096-bit) shared memory for tiny data 
     concentrator application. 

     The shared memory works as 256-registers and 4096-bits memory, and can be 
	  accessed by the following Modbus addresses that are the same space. 
	       Bit-Address (0x, 1x)= 3000-7095
	  Register-Address (3x, 4x)= 3000-3255
	  
	  The shared memory supports both client-mode (pair-connection) and server-mode 
	  operations. For example: ET-2200 (client-mode) may pull remote DIs (bits) into 
	  shared memory, and the HMI reads registers from the shared memory (ET-2200 is 
	  server-mode also) to parse the DIs states. This reduces loadings of the HMI.

Chg: Change the DI Count, DI Address, DO Address fields to IO Count, Local IO 
     Address, Remote IO Address for supporting new push/pull of the pair-connection 
	  function.
	  
     Now, the pair-connection supports not only DI to DO, 
	  but also DO to DO, DI/DO/AI/AO to memory, memory to DO/AO settings.
	  
Add: Add UDP pull function.

Fix: Let each pair-connection using its own Transaction ID instead of shared.

Add: Add pair-connection states on monitor page.

Fix: Monitor page shows wrong IPv6 string.

Fix: Allows empty for user-defined IPv6 address.

Chg: Rewrite the IP filter page for easy settings.
     IPv4/v6 filed is now combined also.
	  Add a check box for enable/disable filter function.

===========================================
Jul.12, 2022, B2.3.4 

Add: Support SNMP v1/v2c Agent.
     MIBII : sysContact, sysName, sysDesc, sysLocation.
	  Private MIB: modelName, aliasName, firmwareVersion, DI/DO states.
	  Trap: coldStart, warmStart, DI/DO state-changes.

Fix: Force using 00:0d:e0:xx:xx:xx MAC range when updating firmware triggered 
     from web (network page). This should NOT be a problem for most users, since
	  the module already have the same configuration on factory setting.
	  
Fix: Stop the PWM output if DO safe-value is enabled for host/slave watchdog.

===========================================
Dec.16, 2021, B2.3.2 

Fix: Modbus TCP does not work correctly with DI modules.
     This issue happened on B2.3.1 only.

===========================================
Oct.14, 2021, B2.3.1 

Fix: To support multiple MQTT messages (publish, ack...) in a single TCP packet, 
     instead of a single message only.
	  
Fix: MQTT publish messages does not work correctly when using both di_all, dixx.
     Same issues on do_all, doxx and rb_all, rbxx. Fixed.	  

Fix: Web page sometimes unstable, fixed.

Chg: Clear PWM output (DO off) when disabling PWM, prevents keeping alarm high.
     Reset PWM timer when enabling PWM, so multiple channels work at the same time.     

Chg: Web page uses checkbox to replace input box for Enable Latched DI, 
     Clear Latched High, Clear Latched Low states.

===========================================
Sep.01, 2021, B2.3.0 

Chg: Arrange the IP Address fields of the network page into 3 sections: 
     IPv4, IPv6, DNS Setting.

Chg: Disable the UDP heartbeat by default.

Chg: Change the pair-connection pages from 3 (pair settings 1-5, 6-9, 10-11) 
     to 2 (pair settings 1-6, 7-11).

Chg: Change the pair-connection settings to use a single submit button for a page,
     instead of using multple buttons.

Chg: Remove radio buttons for IP mode and Host-Name mode on the pair-connection page.
     The IP / Host-Name mode is depending on the string format of the user's input.
	  
Chg: Share an edit box for the IPv4 and Host-name input on the MQTT page.
     Remove IP mode options.

Chg: Show connection state of the pair-connections.

Fix: Update the checkbox state of the dio / pwm /sync pages depending on their value. 

Fix: Pair-connection DIO address does not shift correctly. 

Chg: Remove the "Current Port Setting" information from Home page. 
     The monitor page has more information instead.

===========================================
Apr.16, 2021 B2.2.1 (no release)

Add: Supports IPv6 and DNS query.

===========================================
Mar.25, 2021, B2.0.2 (no release)

Fix: Sometimes the Broker will send multiple MQTT data in one packs, modify the data 
	judgment mechanism to automatically analyze whether there are multiple data.

Fix: If only DO_All/DI_All is set when using State-Change Publish, 
	single-channel DO/DI will still have action.

Fix: The device may be crashed by message '0' when using the MQTT DO subscribe feature. 

Fix: If the Topic message(Dec) exceeds the DO range, the DO will decode fail when using the MQTT DO subscribe feature.

Fix: If the Topic message(Hex) without prefix "0x" is received, the DO will decode fail when using the MQTT DO subscribe feature.

Fix: The MQTT DO_ALL State-Changed Publish feature may send wrong message. 

===========================================
Aug.22, 2019, B2.0.1 (no release)

Fix: Host name is queried via DNS service, manually input domain name is required.
     Query is operated before connecting to MQTT broker.
	  Query is operated again 10 seconds later if previous query is fail,
	  or 30 seconds later if success.

Chg: All Infomation topic is changed to periodic publish.
     This includes Module Name, MAC address, DI and DO states in JSON format.
	  
Fix: DO power-on publish malfunction.
     DI/DO publish does not send correctly after reconnect.
	  DI All state-change publish malfunction.
	  DI/DO checkbox malfunction when select all on web configuration.

===========================================
Aug.13, 2019, B2.0.0 (no release)

Add: Supports MQTT functions.

     Topic Name is the combination of Main Topic Name and Sub Topic Name.
	  The Main Topic Name is useful to store the common leading string of all 
	  topic names, instead of stores same leading string in every topic names. 
	  The Main Topic Name can be empty (shows N/A) is not used.
	  
	  Supports Last Will Message, DO (digital output) subscription, DO Power-on 
	  publish, DO readback pbulish, DI State-Change / Periodic publish.
	  
	  DI / DO supports both single channel or all channels operations based on 
	  different topic names.

===========================================
May.28, 2019, B1.5.1

Add: Supports read/write Alias Name through Modbus TCP protocol at 40180 - 40189 (base 0).
     The name buffer size is total 20 bytes including a NULL terminator.
	  Since the protocol is high-byte first while the string is low-byte first,
	  so it is required to swap high/low bytes when accessing the Alias Name.
	  
	  For example: 
       E  t  h  e  r  I  O
      45 74 68 65 72 49 4F 00
      ==> 
		 t  E  e  h  I  r     O  (High byte first in protocol)
      74 45 65 68 49 72 00 4F

      Read AO:  01 02 00 00 00 06 ( 6 bytes)  01 03 00 B4 00 0A (10 points)
      Response: 01 02 00 00 00 17 (23 bytes)  01 03 14 (20 bytes) 74 45 65 68 49 72 00 4F 00 00 00 00 00 00 00 00 00 00 00 00  

		
		 1  2  3  4  5  6  7  8  9  A  1  2  3  4  5  6  7  8  9
      31 32 33 34 35 36 37 38 39 41 31 32 33 34 35 36 37 38 39 00
      ==> 
		 2  1  4  3  6  5  8  7  A  9  2  1  4  3  6  5  8  7     9 (High byte first in protocol)
      32 31 34 33 36 35 38 37 41 39 32 31 34 33 36 35 38 37 00 39 

      Write AO: 01 02 00 00 00 1B (27 bytes)  01 10 00 B4 00 0A (10 points) 14 (20 bytes) 32 31 34 33 36 35 38 37 41 39 32 31 34 33 36 35 38 37 00 39
      Response: 01 02 00 00 00 06 ( 6 bytes)  01 10 00 B4 00 0A (10 points)

===========================================
Mar.28, 2018, B1.4.8

Fix: Module may be rebooted automatically when using web I/O under unstable network.
     
	  For example: Computer/Notebook is located in Wi-Fi network and using web browser
	  to control digital I/O for few minutes, then the module may be rebooted.
	  
	  This issue is only happened when using web browser under unstable network.
	  Standard Modbus TCP I/O control does not have this issue.

Fix: Web I/O status page (Home) does not refresh when the I/O module is rebooted.
     Modify the web page to reload preventing this issue.

===========================================
Jnu.16, 2017, B1.4.6

Chg: Change the DHCP client waiting time to 20 seconds.
     Reboot the module if DHCP is enabled and timed out.

Chg: Use MAC address as seed for getting random DHCP xid.
     This prevents each module using the same xid even that works.

===========================================
Dec.13, 2016, B1.4.5

Add: Support new option for HTTP port. Default is 80.

===========================================
Jul.04, 2016, B1.4.4

Fix: Add delay before reconnecting to remote site.
     This prevents busy reconnecting, and prevent problems on some devices.

Fix: Counter values are not cleared correctly via Modbus TCP requests. Fixed.	  

===========================================
Jun.24, 2016, B1.4.3

Add: Supports new models tPET-PD6, tPET-PD2R1, tPET-PD2POR2.

===========================================
May.13, 2016, B1.4.2

Add: Shows Modbus address on the web configuration pages for reference.
     This includes Status, DIO configuration, Sync and PWM pages.

Add: Supports new Modbus AO Address 
	  40201 for DI Filter Level (0 = disable, 1 ~ 6500 ms).

     Supports new Modbus DO Address 
	  00332 - 00363 for Enable Safe Value (Enable Watchdog). (0 = disable, 1 = enable)
	  00364 - 00395 for Enable/Disable PWM Alarm. (0 = disable, 1 = enable)
				       PWM Alarm settings are not saved in flash by default,
						 but customer can still write 1 to DO address 00060 to save it.
	  00396 - 00411 for Enable DIO Level Sync. (0 = disable, 1 = enable)
	  00412 - 00427 for Enable DIO Rising Active (DI sync to DO). (0 = disable, 1 = enable)
	  00428 - 00443 for Enable DIO Failing Active. (0 = disable, 1 = enable)

Fix: Fix a flash writing issue when sending AO commands to configure the module.	  
 
Chg: Change the name of "Watchdog Timeout" on DIO configuration web page to 
     "Host/Slave Watchdog Timeout". 
	  PWM alarm is triggered by this "Host/Slave Watchdog Timeout" setting also.
	  
Chg: Change the name of "Enable Watchdog" on DIO configuration web page to
	  "Enable Safe Value (Enable Watchdog)". This works as Safe Value Mask.

Chg: Allows "PWM Alarm" to be enabled without "DO Watchdog" enabled.
	  Note: The "Host/Slave Watchdog Timeout" setting still must be configured first.

===========================================
Apr.16, 2016, B1.4.1

Chg: Enable IP address x.x.x.0 and x.x.x.255, even not suggested.

===========================================
Mar.18, 2016, B1.4.0

First Release Version.
Support tET/tPET-P2R2 RevB.

##
