/****************************************************************/
/*  針對 7188E/8000E 的 Modbus/TCP 及 Modbus/RTU 轉 Modbus/RTU  */
/*  及 7188XB 的 Modbus/RTU 轉 Modbus/RTU  的協議轉換函式庫     */
/*  [25,9月,2002] 首度發佈 by Kevin                             */
/****************************************************************/
1.7.2 版[2012/01/03] by Mac
    新支援iP-8000
    新功能
        Modbus/RTU, Modbus/ASCII slave 支援廣播命令
        a.命令中站號必須為0
        b.支援寫入AO, DO位址
          FC5  Write single coil (0xxxx)  for DO
          FC15 Force multiple coils (0xxxx)  for DO
          FC6  Write single register (4xxxx)  for AO
          FC16 Write multiple registers (4xxxx)  for AO
        c.控制器寫入數值後不會回應任何訊息

    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.7.0 [2007,八月,23]    
    
    MiniOS7 image file: 
        7188XA (40M CPU) (不變) 
            2.02 build 004, Feb 26 2007
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\7188xa_CR_20070226.img
        7188XB (40M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\7188XB_CR_20070301.img
        7188XC (20M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XC\OS_Image\For_20M\7188XC-20070301.img
        7188EX (40M CPU) (不變)
            2.02 build 002, Apr 10 2007
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\7188e-UDP-CR-20070410.img

        I-8000 (40M CPU) (更新)
            2.02 build 013, Jun 17 2011
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8000_UDP-20110125.img
        I-8000 (80M CPU) (更新)
            2.02 build 013, Jun 25 2011
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\C836_UDP-20110117.img
        iP-8000 (80M CPU)(新支援)
            2.04 build 014, Sep 21 2011
            CD:\Napdos\Modbus\iP8000\OS_Image\C837_2M_UDP-20110921.img             
------------------------------------------------------------------------
1.7.0 版[8,8月,2007] by Mac
    新增Modbus ASCII Slave支援
    COM Port Enable Mode 參考下列定義
    _VxComm             0  //==> VxComm                                  
    _ModbusRTU_Gateway  1  //==> Modbus/RTU  Gateway                            
    _Programming        2  //==> Programming                             
    _ModbusRTU_Slave    3  //==> UpLink (Modbus/RTU slave port)  
    _Debug              4  //==> Debug (列印偵錯訊息,包含系統設定資訊,通訊內容....)
    _Console            5  //==> Consol (尚未支援,ET-6000 使用這個模式可以做簡易設定)
    _ModbusASCII_Slave  6  //==> UpLink (Modbus/ASCII slave port)

    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.7.0 [2007,八月,23]    
    
    MiniOS7 image file: 
        7188XA (40M CPU) (不變) 
            2.02 build 004, Feb 26 2007
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\7188xa_CR_20070226.img
        7188XB (40M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\7188XB_CR_20070301.img
        7188XC (20M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XC\OS_Image\For_20M\7188XC-20070301.img
        7188EX (40M CPU) (不變)
            2.02 build 002, Apr 10 2007
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\7188e-UDP-CR-20070410.img
            
        8000 (40M CPU) (更新)
            2.02 build 006, Jun 25 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8000_UDP_20070625.img
        8000 (80M CPU) (更新)
            2.02 build 006, Jun 25 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\C836_UDP-20070625.img
------------------------------------------------------------------------

1.6.9 版[18,5月,2007] by Mac
    改善 Modbus/RTU 的資料檢查
        連接RTU設備時，除了檢查CRC之外加上檢查資料長度,加強判斷通訊資料。
    
    關閉功能
        將 UpLink 的模式，只當單純的 Slave，而將 Gateway 功能關掉。
        從 COM Port 進來的命令，若 Net ID 不符合的話，將不會轉到其他COM Port
        Geteway 功能只用在 TCP/IP 連線。
        
    調整參數
        調整blank value (unit:ms)
        baudrate   Ver 1.6.3   1.6.6   1.6.8   1.6.9
        -------------------------------------------
            115200:     10      100     25       3
             57600:     10      100     25       5
             38400:     12      60      40       7
             19200:     12      60      40       9
              9600:     15      70      60      15
              4800:     20      80      80      28
              2400:     25      90      90      50
           default:     15      50      40      15
        -------------------------------------------
                   
    === 關於寫程式部分 ====   
    新增命令
        將Modbus_Request_Event分成Modbus_Request_Event,Modbus_Response_Event
            Modbus_Request_Event:
                一但 7188E/8000E 收到一個 Modbus/TCP 或 Modbus/RTU 命令時，
                會先執行 Modbus_Request_Event 程序，
            
            Modbus_Response_Event:
                在準備傳回一個 Modbus/TCP 或 Modbus/RTU 回應前，
                會先執行 Modbus_Response_Event 程序，
                你可以執行一些程式碼。
    
    修正問題
        修正ModbusASCII_Master讀取DI值時，
        address 8 以後的值都是重複address0~7的值的問題。

    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.6.9 [2007,May,21]    
    
    MiniOS7 image file: 
        7188XA (40M CPU) (不變) 
            2.02 build 004, Feb 26 2007
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\7188xa_CR_20070226.img
        7188XB (40M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\7188XB_CR_20070301.img
        7188XC (20M CPU) (不變)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XC\OS_Image\For_20M\7188XC-20070301.img
        7188EX (40M CPU) (更新)
            2.02 build 002, Apr 10 2007
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\7188e-UDP-CR-20070410.img
            
        8000 (40M CPU) (更新)
            2.02 build 002, Apr 9 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8000_UDP_20070409.img
        8000 (80M CPU) (更新)
            2.02 build 002, Apr 9 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\C836_UDP-20070409.img
------------------------------------------------------------------------

1.6.8 版[13,3月,2007] by Kevin
    支援 P824 CPU.
    
    增加一種 COM port 的工作模式
       Mode5 = Consol.
       ET-6000 使用此模式進行一些簡單的設定。
       
    變更 blank value (unit:ms)
        baudrate   Ver 1.6.3   1.6.6   1.6.8
        -------------------------------------------
            115200:     10      100     25     
             57600:     10      100     25
             38400:     12      60      40
             19200:     12      60      40
              9600:     15      70      60
              4800:     20      80      80
              2400:     25      90      90
           default:     15      50      40
        這個 blank value 是使用在接收 COM port 資料時使用的。
               
    可以和 MiniOS7 Utility 3.x.x 一起使用
        MiniOS7 Utility 3.x.x 可以透過乙太網路對 7188E/8000E 做設定、上傳檔案。
        這使得維護的工作變簡單了。
        
    === 關於寫程式部分 ====   
    新增命令 Modbus_Request_Event,
        一但 7188E/8000E 收到一個 Modbus/TCP 或 Modbus/RTU 命令時，
        你可以執行一些程式碼。下列相關的全域變數 (定義在 .h 中)，也是很有用處的。 
            extern unsigned int iModbusRequest_Fun;
            extern unsigned int iModbusRequest_Addr;
            extern unsigned int iModbusRequest_IOCount;
            extern unsigned long lModbusRequest_TimeTicks;

    修正問題
        1. 當 COM port 被設定成 Gateway 模式時，將 COM port 的 buffer 狀態設成 IDEL，
           否則在變更過 COM port 的模式後，這個 Gateway 功能可能會無法使用。
           
        2. ID 無法設成 128~255。
        
        3. ModbusRTU_Master, ModbusASCII_Master 可能無法正確地工作。
            只有發生在 Modbus 命令 1, 2, 15. 
            程式中呼叫 "ceil" 將 Byte 數值轉換成 bit 數值，但是 "Ceil" 有時候執行並不
            正確，所以使用另外的方法來取代 "ceil"。
                    
    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.6.8 [2006,Aug,16]    
    
    MiniOS7 image file: 
        7188XA (40M CPU) (更新) 
            2.00 build 008, Feb 26 2007
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\7188XA_CR_20070226.img
        7188XB (40M CPU) (更新)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\7188XB_CR_20070301.img
        7188XC (20M CPU) (更新)
            2.00 build 006, Mar 1 2007
            CD:\Napdos\Modbus\7188XC\OS_Image\For_20M\7188XC-20070301.img
        7188EX (40M CPU) (更新)
            2.02 build 002, Mar 01 2007
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\7188E-UDP-CR-20070301.img
            
        8000 (40M CPU) (更新)
            2.02 build 002, Mar 12 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8000_UDP_20070312.img
        8000 (80M CPU) (更新)
            2.02 build 002, Mar 12 2007
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\C836_UDP-20070312.img
------------------------------------------------------------------------
            
1.6.7 版 [28,8月,2006] by Kevin
    1. 修正無法 讀/寫 超過 500 以上的暫存器 (register) 位址
        移除了 VcomCmdModbus 裡面的 MAX_REGISTER_COUNT 限制。
        MAX_REGISTER_COUNT 從 1.6.4 版後，就被從 .h 檔中移了，
        但是在 source code 中，它並沒有被移除。
    
    2. 修正 Modbus/RTU 的通訊問題
        下面兩個模式，於 1.6.5 版被改寫過
            a. COM port 設成 UpLink 模式 (呼叫 CheckModbusRequest 命令)
            b. ModbusRTU_Master
        對於 I-7188XA and 7188XB 通訊會變成不穩定。在這個版本，這兩個命令
        已經被改善得更穩定了。
        
        所以，假如你的韌体(firmware)使用 mbr7_165.Lib 或 mbr7_166.Lib，那麼
        你必須更新到 1.6.7 版本來解決這個問題。
        
    3. 支援一個 TCP/IP 封包之中包含多個 Modbus 命令。 
        標準的 Modbus/TCP 格式，一個 TCP/IP 封包只包含一個 Modbus 命令
        (6 bytes 的前導字元 + 命令本身)。
        在這個版本中，你可以在一個 TCP/IP 封包之中塞入多個命令，並且
        在回覆的封包中，一次得到全部的結果。
        例如:
            封包A ==>  [6 Leading bytes] + [命令 B] 
                     + [6 Leading bytes] + [命令 B]
                     + [6 Leading bytes] + [命令 C]
                     + [6 Leading bytes] + [命令 D]
                       
            封包B <==  [6 Leading bytes] + [結果 A] 
                     + [6 Leading bytes] + [結果 B]
                     + [6 Leading bytes] + [結果 C]
                     + [6 Leading bytes] + [結果 D]
                       
        這個方法可以減少 TCP/IP 的封包數量，並且讓你的程式和 Modbus/TCP 設備
        的通訊效能更好。
        
        當然，你的 Modbus/TCP driver 必需有支援。
        
    === 關於寫程式部分 ====    
    1. 增加 全域變數
            lModbusRequest_TimeTicks
                根據這個變數，可以知道上次 Modbus 命令發生時的 timeticks 。
                
    2. 修正 ModbusRTU_Master 的問題
        從 1.6.6 版開始，這個命令被修改成可以支援 non-blocked 的通訊模式。
        這個 non-blocked 對於 M-7000 系列的 I/O 模組，並沒有正常運作。
                    
    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.6.8 [2006,8月,16]    
    
    MiniOS7 image 檔案: 
        For 7188XA (40M CPU) (更新)
            2.00 build 002, Jul 14 2006
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\7188XA_CR_20060614.img
        For 7188XB (40M CPU) (更新)
            2.00 build 002, Jul 14 2006 
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\7188XB_CR_20060614.img
        For 7188EX (40M CPU) (更新)
            2.00 build 002, Jul 08 2006
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\7188E_CR_20060608.img
        For 8000 (40M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8k050902.img
        For 8000 (80M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\8e050902.img                
------------------------------------------------------------------------
1.6.6 版[4,7月,2006] by Kevin
    I-8000 控制器的 COM ports 和 7188E 一樣，支援下列不同的模式 
       The enable modes include
            (a) VxComm 
            (b) Modbus/RTU gateway
            (c) Programming
            (d) UpLink (be a Modbus/RTU slave port)
            (e) Debug
       
       Modbus Utility 1.5.1 可以用來設定 COM port 的組態。
       
    針對寫程式
        1. MBT8_150.lib 分成兩個檔案 ==> MBT8_166.lib 和 IO_153.lib
            MBT8_nnn.Lib 負責處理 Modbus 通訊
            IO_nnn.Lib 負責處理 I/O 掃瞄
            
        2. 改變 EEPROM 儲存資料的位置 
           (將 7188/8000 的資料位置同步化)
           請參考 lib 目錄下 EEPROM_List.txt 的詳細說明。
           
        3. 改善 ModbusRTU_Master2Slave 和 ModbusASCII_Master2Slave
            (a) 增加 non-blocked 通訊模式
                有一個 iWait 的參數可以用來決定要使用 blocked (原先模式) 
                或 non-blocked (新的模式)。
            (b) 增加命令
                    ModbusRTU_Master_Send
                    ModbusRTU_Master_Receive
                    ModbusASCII_Master_Send
                    ModbusASCII_Master_Receive  
                    
        4. 改善 VcomSaveComData
            這個命令可以檢查存在 EEPROM 中的資料是否和要寫入的新資料相同。
            假如是相同的，則這個命令就不會重覆寫入。這樣可以避免 EEPROM
            寫入的動作太頻繁。
            (EEPROM 只能被寫入約 1 百萬次)
            (這只針對 非-Xserver 的程式有用)
            
        5. 從這一個版本開始, 7188/8000 使用相同的 Modbus 核心。
            (a) 對 7188 和 8000 而言，每個 modbus 的命令都是相同的。
                那也就是說, I-8000 控制器的 COM port 可以被設成 
                VxComm, Modbus/RTU gateway, UpLink, Debug 其中一種。
                
            (b) 要使用 I-8000 控制器上的 I/O 模組，你必須加入另一個 
                I/O 的 library (IO_nnn.lib)
                (在 MBT8_150.lib 之前, modbus 的核心和 I/O 掃瞄的核心
                 是結合在一塊的)
                 
            (c) Lib and Head 檔案被簡化成 
                    MBRTU.h         (針對全部 7188/8000)
                    MBTCP.h         (針對全部 7188/8000)
                    MBR7_nnn.Lib    (針對全部 7188)
                    MBR8_nnn.Lib    (針對全部 8000)
                    MBT7_nnn.Lib    (只針對 7188E)
                    MBT8_nnn.Lib    (只針對 8000E)
                    
    ========== 相關訊息 ==========
    Modbus Utility: Ver 1.5.1 [2006,6月,21]    
    
    MiniOS7 image 檔案: 
        For 7188XA (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\XA050701.img
        For 7188XB (40M CPU) (不變)
            2.00 build 002, Jul 01 2005 
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\XB050701.img
        For 7188EX (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\e-050701.img
        For 8000 (40M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8k050902.img
        For 8000 (80M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\8e050902.img   
------------------------------------------------------------------------
            
1.6.5 版 [07,3月,2006] by Kevin
    修正 RS-485 port 當成 Modbus/RTU slave 使用時的通訊問題
        當有數個 slave 設備在同一個 RS-485 網路上，通訊會有問題。
        此問題已解決。
        
        RS-232 或 Ethernet 通訊是正常的。
        
    ========== 相關訊息 ==========
    Modbus Utility: 1.3.3 版 [2005,5月,05]
    
    MiniOS7 image 檔案:  
        For 7188XA (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\XA050701.img
        For 7188XB (40M CPU) (不變)
            2.00 build 002, Jul 01 2005 
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\XB050701.img
        For 7188EX (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\e-050701.img
        For 8000 (40M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8k050902.img
        For 8000 (80M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\8e050902.img     
------------------------------------------------------------------------            
1.6.4 版[17,2月,2006] by Kevin
    1. 增加 Modbus/RTU Gateway 功能的命令緩衝區功能
        每個 COM port 可以儲存 4 個命令在緩衝區內。當數個 Modbus Master
        要使用同一個 COM port 的 gateway 功能時，此緩衝區可以將數個命令
        暫存起來，然後一個一個轉丟到 COM port 上的 Modbus/RTU 設備上。
        這個功能可以避免資料碰撞。
        
    針對寫程式
        1. 支援 XS 架構
        2. 加入 RefreshWDT 到 ModbusRTU_Master2Slave。這樣可以避免 timeout
           這個參數超過 0.8 秒而被 WDT reset 掉。
        3. 增加 Debug 訊息到 Modbus/AsCII Master to Slave.  
        4. 改變 InitModbus
            需要輸入額外的 4 個參數。參考 InitModbus 的說明。
        5. 增加 Modbus/TCP master to slave 的命令     
    
    ========== 相關訊息 ==========
    Modbus Utility: 1.3.3 版 [2005,5月,05]
    
    MiniOS7 image 檔案:  
        For 7188XA (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\XA050701.img
        For 7188XB (40M CPU) (不變)
            2.00 build 002, Jul 01 2005 
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\XB050701.img
        For 7188EX (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\e-050701.img
        For 8000 (40M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8k050902.img
        For 8000 (80M CPU) (不變)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\8e050902.img    
------------------------------------------------------------------------    
1.6.3 版[29,9月,2005] by Kevin
    針對寫程式
        1. 改變 ModbusMaster2Slave:
                名稱改為 ModbusRTU_Master2Slave,
                並且增加一個 lTimeout 的參數。
        
        2. 新增 ModbusASCII_Master2Slave
           這個功能除了使用的通訊協定是 Modbus/ASCII 之外，
           其餘用法和  ModbusRTU_Master2Slave 相同。
        
        3. 支援 i-8000 系列的控制器
           7188XA/XB/EX 和 i-8000 控制器使用同一份程式源碼。
           但是針對 i-8000 的函式庫並不支援插在插槽上的 I/O 模組。
           所以，假如需要自動掃瞄模組狀態的功能，最好是使用原本 i-8000 
           的 Modbus/TCP 函式庫 (MBT8_xxx.lib)。
           
           假如要讓 8410/8411/8810/8811 具有 Modbus 的通訊功能，這個
           函式庫就可以了。但是你必需自行撰寫關於插槽上 I/O 模組的程式。
           
    ========== 相關訊息 ==========
    Modbus Utility: 1.3.3 版 [2005,5月,05]
    
    MiniOS7 image 檔案:  
        For 7188XA (40M CPU) (更新)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188XA\OS_Image\For_40M\XA050701.img
        For 7188XB (40M CPU) (更新)
            2.00 build 002, Jul 01 2005 
            CD:\Napdos\Modbus\7188XB\OS_Image\For_40M\XB050701.img
        For 7188EX (40M CPU) (不變)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\e-050701.img
        For 8000 (40M CPU) (更新)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_40M\8k050902.img
        For 8000 (80M CPU) (更新)
            2.00 build 004, Sep 02 2005
            CD:\Napdos\Modbus\8000e\OS_Image\For_80M\8e050902.img    
------------------------------------------------------------------------
1.6.2 版[26,8月,2005] by Kevin
    改善系統的穩定度和效能
        本次更新了多個函式庫(Lib)來增加穩定度和效能。
        詳情請參閱 Lib 目錄下的清單(7188E_Lib_List_162.txt)。
         
        
    針對寫程式
        增加功能
            增加 Modbus/TCP 主控端的功能。總共有 3 個命令：
            1. ModbusTCP_Init
            2. ModbusTCP_Master2Slave
            3. ModbusTCP_Close
            
        使用上述命令，7188E/8000E 最多可以連結 8 個遠端的 
        Modbus/TCP 設備。
        這些功能可以偵測遠端的 Modbus/TCP 設備是否運作正常。如果遠端的
        設備當機了，這個功能可以偵測出這個狀態，並且當這個設備一但恢復
        正常後，這個功能還可以馬上恢復通訊。
        
    ========== 相關訊息 ==========
    Modbus Utility: 1.3.3 版 [2005,5月,05]
    
    MiniOS7 image 檔案: 
        For 40M CPU (更新)
            2.00 build 002, Jul 01 2005
            CD:\Napdos\Modbus\7188e\OS_Image\For_40M\e-050701.img
------------------------------------------------------------------------  
          
1.6.1 版 [05,5月,2005] by Kevin
    改變 Modbus/RTU gateway 的對應關係
        關於 'Station per COM port' 這個選項
        以前: 不管串列埠的模式是哪一種，都會被分配到上面選項所定義的
              Modbus/RTU 設備數量。但是只有串列埠的模式為 
                Modbus/RTU gateway 時，才可以處理 Modbus/TCP 到
                Modbus/RTU 的轉換。也就是說，有些設備的站號被分配到
                某些串列埠，卻沒有被使用到。
        Now: Modbus/RTU 設備的站號只被分配到 Modbus/RTU gateway 模式
             的串列埠。
             
        Modbus Utility 的線上說明文件，改版訊息中有記錄兩者的不同。
        
    === 相關訊息 ======
    Modbus Utility: 1.3.3 版 [2005,5月,05] (更新) (必要)
------------------------------------------------------------------------
    
1.6.0 版[08,4月,2005] by Kevin
    使得 NAP OPC server 可以支援 "使用 Modbus/RTU Gateway 模式連接在
    COM port 上面" 的 Modbus/RTU 設備(例如 PLC)。
        以前:
            OPC server 只支援和 7188XA/7188XA/7188XB 內部的暫存器通訊。
------------------------------------------------------------------------

1.5.9 版[22,9月,2004] by Kevin
    提供一個 7188EX 使用的 Modbus/RTU 函式庫 
    (MBR7Ennn.Lib and MBRTU_7E.h)。
        它可以和其他不是使用 Xserver 架構開發的程式整合在一起。
        範例程式請參考 MBDemo00_Modbus_RTU_Only。
------------------------------------------------------------------------

1.5.8 版 [26,7月,2004] by Kevin
    改善通訊的效能 (減少 3ms 或 6 ms 通訊時間)
        以前:
            使用方式 0:
                接線方式: PC <===> 7188
                詢問 7188 內部暫存器花費時間 
                (通訊時間)+(延遲 3 ms)+(CPU 運算時間)
                
            使用方式 1:
                接線方式: PC <===> 7188 <===> Modbus/RTU 設備
                詢問 Modbus/RTU 設備花費時間  
                (通訊時間)+(延遲 3 ms)+(CPU 運算時間)
                (通訊時間)+(延遲 3 ms)+(CPU 運算時間) 
                
        1.5.8 版
            使用方式 0:
                接線方式: PC <===> 7188
                詢問 7188 內部暫存器花費時間
                (通訊時間)+(CPU 運算時間)
                
            使用方式 1:
                接線方式: PC <===> 7188 <===> Modbus/RTU device
                詢問 Modbus/RTU 設備花費時間  
                (通訊時間)+(CPU 運算時間)
                (通訊時間)+(CPU 運算時間)                
                
        備註: CPU 運算時間花費約 1~2ms
        
    (只針對欲修改 Modbus 的 firmware 而言)
        修改函數 ModbusMaster2Slave:
            支援 modbus function code 5 and 6.
            釐清回傳值的意義
                以前：總是傳回 0
                現在：針對各種不同狀況，傳回不同的回應值，
                      例如 timeout、CRC 檢查錯誤、例外碼....等等。
        
        增加變數
            iModbusRequest_Fun
            iModbusRequest_Addr
            iModbusRequest_IOCount
------------------------------------------------------------------------

1.5.7 版 [16,2月,2004] by Kevin
    支援 7188XA      
------------------------------------------------------------------------

1.5.6 版 [1,1月,2004] by Kevin
    修正錯誤:
        1. 無法和 NAP OPC server 正常通訊。
        
1.5.5 版 [24,11月,2003] by Kevin
    支援多個 Modbus/RTU 上傳串列埠(COM port)
        用法1: 執行 Modbus Utility 將串列埠的動作模式設定成 UpLink 
                
        用法2: 修改 Modbus 的 Firmware (使用 C 語言)，
               呼叫 Set_EnableMode 將將串列埠的動作模式設定成 UpLink 
                
    移除函數 (只針對欲修改 Modbus 的 firmware 而言)
        Set_DebugPort, Set_ModbusUpLinkPort
    
    移除變數 (只針對欲修改 Modbus 的 firmware 而言)
        iModbusUpLinkPort, iDebugPort
            
    注意: Modbus 的範例程式的原始碼中，和 Modbus 核心、設定相關的部分，
          也被修改了。請參考 MBDemo00 (針對 7188XB) 或 MTDemo00 
          (針對 7188EX) 來修改您客制化過的 Modbus 的 firmware 以使用新版
          的函式庫。 

------------------------------------------------------------------------
1.5.4 版 [14,8月,2003] by Kevin
    修正錯誤:
        1. 當在 Modbus Utility 中更改了串列埠 (COM port)的動作模式之後，
           必須將 7188E 的電源重新啟動使得這些更改有效。
           這個問題是因為Xserver中的EnableCom和DisableCom這兩個函數並沒
           有被正確地執行。將Xserver的核心(Vcom3009.Lib)更新到
           2003年8月4日的版本就可以解決這個問題。此後，你並不需要再重新
           啟動7188E的電源來使得這個改變生效。
           
    開放功能:
        1. 允許使用者更改串列埠 (COM port) 的設定(data bit, stop bit, parity)。
           注意：欲使用此功能，Modbus Utility 必須是 1.2.4 以後的版本。
           
    MiniOS7 image 檔案:
        針對 7188EX: 2.00.001 (e-030529.img)
        針對 7188XB: 2.00.001 (xb030516.img)       

===============================================================================           
1.5.3 版 [26,6月,2003] by Kevin
    更改軔體(在 7188EX 中執行的.exe 檔案)的名稱
        原本的名稱，不管版本號碼為何，都是叫做 MBTCP_7E.exe 。
        新的名稱變成 MBT7_nnn.exe ，其中 nnn 代表版本號碼。
        例如： MBT7_153.exe 代表其軔體版本為 "1.5.3".
        
    更新 7188EL.Lib (25,1月,2003)
        假如你只需要使用預設的軔體 而不需要使用 C 語來修改此軔體，那麼請忽略
        以下的詳細說明。 

        詳細說明：  
        7188E 的 COM1 和 COM2 具有兩種工作模式，一個一般模式，另一個是 DMA 模
        式。     
        欲將 COM1/2 安裝在一般模式，請呼叫函式 InstallCom 。
        欲將 COM1/2 安裝在 DMA 模式，請呼叫函式 InstallCom1_DMA 和 
        InstallCom2_DMA。 Xserver 核心所使用的預設模式是 DMA。
        
        發現到的錯誤是：
            當呼叫 InstallCom 將 COM1/2 的由一般工作模式改變成 DMA 工作模式時，
            COM1/2 無法正常動作。這個問題在更新完 7188EL.Lib 之後，就解決了。

===============================================================================
1.5.3 版 [13,6月,2003] by Kevin
    修正錯誤:
        1. 無法和 NAP OPC server 正常通訊。
        
    修改函數 ModbusMaster2Slave:
        增加 Modbus 的命令 01 和 03 將 DO 和 AO 的值讀回來。
        
    7188E-MTCP 支援 Modbus/RTU Slave 的功能。

===============================================================================    
1.5.2 版 [30,4月,2002] by Kevin
    更改程式中的變數宣告
        1. MAX_REGISTER_COUNT 
                舊方式：   #define MAX_REGISTER_COUNT 100
                目前方式： int MAX_REGISTER_COUNT=500;
           
        2. iMemory_DI, iMemory_DO, iMemory_AI, iMemory_AO 
                舊方式：   unsigned char iMemory_DI[MAX_REGISTER_COUNT];
                目前方式： unsignedchar *iMemory_DI;
 
        上述的更動可以讓使用者在 C 的原始碼中，重新指定 MAX_REGISTER_COUNT 的
        數值來調整可以使用的資料暫存器大小(預設值為各 500 組)。
        用法：
            MAX_REGISTER_COUNT=512;
            iRet=InitModbus();          

===============================================================================
1.5.1 版 [31,5月,2002] by Kevin
	修正錯誤：
		當存取 DO 或 DI 暫存器的數量小於 8 組時，會得到錯誤的回應訊息。

===============================================================================
1.5.0 版 [17,5月,2003] by Kevin
	更改:
		1. Modbus 設定用的命令由 39 號改成 107號。
		2. iModbusInternalID 改成 iModbusNetID
	
	注意:
		Modbus Utility 必須是 1.2.0 以後的版本
        MiniOS7 image 檔案必須是 e-021023.img
        
===============================================================================
1.4.0 版 [31,Dec,2002] by Kevin
	1. 移除所有用來除錯的程式碼，以提升效能。
	2. 使用 EEPROM 來儲存各項設定，並且支援 Modbus Utility 設定 7188E -MTCP。

===============================================================================
1.3.0 版 [16,10月,2002] by Kevin
	7188XB 和 7188E 使用相同的 Modbus 核心。
