What's new for the HMIWorks Standard Edition. Note: Please remember to update the MiniOS8 with last version to prevent problems. Refer to the following folder (after installation): C:\ICPDAS\HMIWorks_Standard\bin\boot Double-click on the OsUpdate.bat file and follow the prompt procedures to update it. ================================================================= ================================================================= v2.05.10, Dec.17, 2012 (MiniOS8 v1.1.3) Add: configuring options on the form which is opened from "HMI -> Project Configuration" - no longer selecting options at hmi_options.h Fix: uart_Open will fail after uart_Close (Updating MiniOS8 to v1.1.3 is required.) Add: supports multi-language development environment - now supports English and traditional Chinese ================================================================= v2.05.09, Sep.07, 2012 (MiniOS8 v1.1.2) Fix: Update to support malloc/free/sprintf functions. ================================================================= v2.05.08, Aug.24, 2012 (MiniOS8 v1.1.2) Add: Supports new functions to get/set configuration information in internal flash parameters area. // Get/Save the network configuration from/to internal flash parameters area. // ulDHCP: 0=Static IP, 1 = DHCP Enabled // ulIP, ulMask, ulGateway: IP, subnet mask, gateway address // return: always 1 (TRUE) int hmi_NetworkParamsGet(unsigned long* ulDHCP, unsigned long* ulIP, unsigned long* ulMask, unsigned long* ulGateway); int hmi_NetworkParamsSet(unsigned long ulDHCP, unsigned long ulIP, unsigned long ulMask, unsigned long ulGateway); // Get/Save NetID from/to internal flash parameter area. // The NetID is reserved for Modbus RTU slave function. unsigned long hmi_NetIDParamsGet(void); int hmi_NetIDParamsSet(unsigned long ulNetID); // Get current IP address used. unsigned long hmi_LocalIPAddrGet(void); // Convert the IP address to string // ulIP: IP address // szIP: String buffer (16 bytes including null terminator char). int hmi_IPToStr(unsigned long ulIP, char szIP[]); // Convert the string to IP address // It will be 0xFFFFFFFF (255.255.255.255) if the string is invalid IP address. unsigned long hmi_StrToIP(char szIP[]); Refer to "ConfigIP" demo program for more information. Add: Supports Runtime-Setting of IP/Mask/Gateway in the setup device page of the HMIWorks. This new option supports TPD-283/283U/433/433F and VPD-133 models. Need to update MiniOS8 v1.1.2 for supporting these new functions. ================================================================= v2.05.07, Aug.13, 2012 (MiniOS8 v1.1.1) Add: Supports VPD-132 and VPD-133 new models. VPD-132: 3.5'' LCD, RS-232/485 x1, RS-485 x1, XVBus x1 VPD-132: 3.5'' LCD, Ethernet (PoE) x1, RS-232/485 x1, RS-485 x1, XVBus x1 Add: Supports XV107, XV110i, XV111i XVBoards for VPD-132 and VPD-133. XV107 : DI *8, DO *8. XV110i: Isolated DI *16. XV111i: Isolated DO *16. Add: Add authenticate code on Modbus RTU slave. Need to update MiniOS8. Add: Supports broadcast address 0 on Modbus RTU slave function. When multiple TouchPADs are working as slave devices, the broadcast function can reduce the writing communications. Need to update MiniOS8. Fix: Make the Modbus RTU slave function working stable when RS-485 bus is heavy loading. Fix: HMIWorks may fail when user changes connection interface between serial and TCP/IP. Add some filter to prevent such change. Changing interface between serial and TCP/IP is only allowed when creating new interface, not in modification mode. ================================================================= v2.05.06, Jul.10, 2012 (MiniOS8 v1.1.0) Fix: Fix the insert sequence of images on the ObjectList property page. Add: Shows item index number of the images on the ObjectList property page. Add: Add I/O profile for tM-P4C4 and tM-AD5C. Add: Supports new model TPD-432F and TPD-433F. (New MiniOS8) TPD-432F: 4.3'' LCD, RS-485 x2, DC input. TPD-433F: 4.3'' LCD, RS-485 x1, RS-232 x1, DC input, Ethernet (PoE). Chg: Move the MRU list to UserConfig.ini file. So, users can easily backup the MRU list to new HMIWorks. ================================================================= v2.05.05, Jun.12, 2012 Fix: The static IP function may not work correctly in v2.05.03 and v2.05.04. Fixed. Fix: The tab key does not work in the text editor launched by double-clicking on the compile error ouput window. Fixed. ================================================================= v2.05.04, Jun.04, 2012 (MiniOS8 v1.0.9) Fix: TCP auto-reconnect feature sometimes may not work correctly. Fixed in the new MiniOS8 v1.0.9 of TPD-433 and TPD-283U, also in the new TPD-283 library. Fix: In Ladder mode, only the first Modbus TCP connection is accessible. Fixed. Fix: Disable the watchdog of TPD-283 before update firmware. This prevents TPD-283 is being reboot during firmware update. Fix: The image under [Pictures] folder cannot be previewed correctly. Fixed. Fix: Slider shows wrong scaling, fixed. Chg: Small modification on backlight control when wake up for TPD-430/433. Updated in the new MiniOS8 v1.0.9 of TPD-430/433. Add: Add io.hsf for LC-103 under M-7000 folder. DI x1, DO x3. Add: ObjList setting window now accepts drag&drop to adjust the item sequence. Multiple selection is also supported. Supports "append" and "insert" option for deciding the position of the new added items. ================================================================= v2.05.03, May.03, 2012 (MiniOS8 v1.0.8) Fix: Very few times TPD-430 may show blank screen when startup. Fixed. The MiniOS8 of TPD-430 must be updated to v1.0.8 for fixing this. Fix: Change background color immediatly in design time after select an new color, instead of in runtime of TouchPAD. Fix: Compile shows error if I/O tag is dragged to the frame when image source is on [Pictures] library. Fixed. Fix: DHCP function for TPD-283U may not work correctly. Fixed. Chg: Modify the scaling function blcok to have internal 10,000 based computation. This prevent wrong computation when dividing a very large number, especial when using K-type themocouple. Add an new ScalingS16 function block. This allows input a 16-bit short integer that would offten used in Modbus protocol. Add: Add "Import Images" (into [Pictures] library) function for batch operation. Now, we support GIF/JPG/BMP/ICO/WMF/EMF image formats. Add GIF support when loading a single picture. Add: Add MRU list in the welcome form. So, we can select one project from the list more easily. Add "Remove nonexistent file" menu item to check and remove the nonexistent MRU list. Add: Add Enabled property for BitButton, TextButton, ObjButton, HotSpot, CheckBox, Slider widgets. macro functions... void LabelEnabledSet(tLabel *pWidget, BOOL bEnabled); BOOL LabelEnabledGet(tLabel *pWidget); void SliderEnabledSet(tSlider *pWidget, BOOL bEnabled); BOOL SliderEnabledGet(tLabel *pWidget); void CheckBoxEnabledSet(tCheckBox *pWidget, BOOL bEnabled); BOOL CheckBoxEnabledGet(tLabel *pWidget); void HotSpotEnabledSet(tHotSpot *pWidget, BOOL bEnabled); BOOL HotSpotEnabledGet(tLabel *pWidget); // These macro functions are design for TextPushButton with text only (no ObjList). void TextButtonEnabledSet(tTextButton *pWidget, BOOL bEnabled); BOOL TextButtonEnabledGet(tLabel *pWidget); // These macro functions are design for TextPushButton with ObjList (images) only. void ObjButtonEnabledSet(tObjButton *pWidget, BOOL bEnabled); BOOL ObjButtonEnabledGet(tLabel *pWidget); void BitButtonEnabledSet(tBitButton *pWidget, BOOL bEnabled); BOOL BitButtonEnabledGet(tLabel *pWidget); Add Visible property for Label, BitButton, TextButton, ObjButton, HotSpot, CheckBox, Slider widgets. Note: WidgetPaint(WIDGET_ROOT) must be used to redraw full screen after change the visible status of widgets. Don't use this feature too much. macro functions... void LabelVisibleSet(tLabel *pWidget, BOOL bVisible); BOOL LabelVisibleGet(tLabel *pWidget); void SliderVisibleSet(tSlider *pWidget, BOOL bVisible); BOOL SliderVisibleGet(tSlider *pWidget); void CheckBoxVisibleSet(tCheckBox *pWidget, BOOL bVisible); BOOL CheckBoxVisibleGet(tCheckBox *pWidget); // These macro functions are design for TextPushButton with text only (no ObjList). void TextButtonVisibleSet(tTextButton *pWidget, BOOL bVisible); BOOL TextButtonVisibleGet(tTextButton *pWidget); // These macro functions are design for TextPushButton with ObjList (images) only. void ObjButtonVisibleSet(tObjButton *pWidget, BOOL bVisible); BOOL ObjButtonVisibleGet(tObjButton *pWidget); void BitButtonVisibleSet(tBitButton *pWidget, BOOL bVisible); BOOL BitButtonVisibleGet(tBitButton *pWidget); Add: Supports TPD-433 new model with 4.3'' LCD, Ethernet (PoE) x1 and RS-485 x1. ================================================================= v2.05.02, Apr.06, 2012 (MiniOS8 v1.0.7) Fix: Sometimes the screen is partially overlayed. Modify the program to reduces this issue. Fix: Sometimes the OnRelease event of TextPushButton, BitButton and HotSpot widgets is missing. Fixed. Fix: Add Mask/Gateway field on the Setup Ethernet Device form. Add: Add callback functions for TouchLCD idle/wakeup, thus users can have his own screen saver application instead of just blank. // Prototype for the TouchLCD idle/wakeup callback functions. typedef void (*PFN_VOIDCALLBACK)(void); // This function is used to configurate the callback function when TouchLCD // idle/wake up. This function disables the predefined LCD auto-off setting. // ulTimeoutMS: Timeout value for entering the idle mode. Unit is ms. // pfnIdle : Callback functions when idle (no touch). // pfnWakeup : Callback functions when wake up (touched). void hmi_LCDIdleSetCallback(unsigned long ulTimeoutMS, PFN_VOIDCALLBACK pfnIdle, PFN_VOIDCALLBACK pfnWakeup); // This function is **optionally** used to clear the TouchLCD idle state, // enable the next idle event and callbacks. // // Sometimes the TouchPAD may need to change the frame to user-defined // alarm page when in idle mode (no touch). ==> Remember it's still in idle mode. // After the alarm off, we may want the TouchPAD go to idle mode (no touch) // again but it failed since it is already in the idle mode (no touch). // For this issue, we need to clear/reset the idle state (no touch) and enable the // idle event. Then, this function is used. void hmi_LCDIdleStatusReset(); MiniOS8 of TouchPAD must be updated to v1.0.7 for supporting this function. Add: Add macro SliderRangeGet(pWidget, lMinimum, lMaximum) to get the slider range defined at design-time. // The lMinimum/lMaximum are not pointers, while the pWidget is a pointer. void SliderRangeGet(tWidget* pWidget, long lMinimum, long lMaximum); Add: Supports TPD-283U. Ethernet x1, RS-485 x1 and dual power input (PoE & DC). ================================================================= v2.05.01, Feb.29, 2012 Add: Add InRange and OutRange function blocks in default category. InRange : Returns true when value is in the range (Min - Max). OutRange: Returns true when value is out of the range (< Min or > Max). Fix: When add a function block and delete it immediately, the HMIWorks reports access violation. Fixed. Fix: Virtual Tags under folers may be lost when opening the project. Fixed. Fix: "Center" alignment of Label does not work correctly. Fixed. (Text widget does not support this yet.) ================================================================= v2.05.00, Feb.24, 2012 (MiniOS8 v1.0.6) Note: Users have to update MiniOS8 of TouchPAD to v1.0.6. Add: Add mtm_ series functions for Modbus TCP master function to replace the old mbm_ series functions. The mbm_ series functions are still available for compatibility. This new series functions support NetID and Timeout parameters. When accessing devices via a gateway connection, the NetID can be dnyamically set. The mbm_RegisterByHandle() function is not available in mtm_ series functions, since it is required. The timeout parameter also can be different depending on remote device's performance. // modbus_id: NetID to bind with the connection. // This is used to make it compatible with mbm_ series functions. // If the mbm_ series functions are not called, then this parameter can be zero. // modbus_ip: Remote IP address // modbus_port: Remote TCP port number, usually is 502 for Modbus TCP. // // Create TCP/IP socket connection tHandle mtm_RegisterTCP(DWORD modbus_ip, int modbus_port); // Create TCP/IP socket connection, and bind the NetID with it. tHandle mtm_Register(int modbus_id, DWORD modbus_ip, int modbus_port); // Delete the TCP/IP socket connection by handle. BOOL mtm_Unregister(tHandle h); // Read/Write DIO // These new DIO functions are using char-array as parameter, instead of 32-bit DWORD type. // So, the max. DIO channels are expended to about 1,900 points, instead of limited on 32 channel. // // h : TCP/IP hanel value // NetID : Modbus TCP Network ID (usually 1 ~ 247) // addr : Starting address of the I/O points // ch_count: Number of I/O channels to be read/write. // pcData : I/O status in char-array. // timeout : TCP/IP timeout value in ms. Default is 200 ms. // When accessing more I/O points, larger timeout value may be required depending on I/O device's performance. // return : TRUE = OK, FALSE = ERROR or TIMEOUT BOOL mtm_WriteDO(tHandle h, int NetID, int addr, int ch_count, char *pcData, DWORD timeout); BOOL mtm_ReadDI( tHandle h, int NetID, int addr, int ch_count, char *pcData, DWORD timeout); BOOL mtm_ReadDO( tHandle h, int NetID, int addr, int ch_count, char *pcData, DWORD timeout); // Read/Write AIO // // h : TCP/IP hanel value // NetID : Modbus TCP Network ID (usually 1 ~ 247) // addr : Starting address of the I/O points // ch_count: Number of I/O channels to be read/write. // pwData : I/O status in WORD-array. // timeout : TCP/IP timeout value in ms. Default is 200 ms. // When accessing more I/O points, larger timeout value may be required depending on I/O device's performance. // return : TRUE = OK, FALSE = ERROR or TIMEOUT BOOL mtm_WriteAO(tHandle h, int NetID, int addr, int ch_count, WORD* pwData, DWORD timeout); BOOL mtm_ReadAI( tHandle h, int NetID, int addr, int ch_count, WORD* pwData, DWORD timeout); BOOL mtm_ReadAO( tHandle h, int NetID, int addr, int ch_count, WORD* pwData, DWORD timeout); Add: Modify the I/O script (for PET-7000/I-7000/M-7000 series) to support timeout setting. The I/O script files (io.hsf) of PET-7000 series is modified to use mtm_ series functions too. Add: Add Modbus RTU Slave funciton in Ladder mode. Now, the TouchPAD (TPD-280/280U/430 and VPD-130) supports this function. To enable the slave function in ladder mode: 1. add a device 2. select TouchPAD as "Modbus RTU Slave" 3. select "Device Series" as "Profiles(MRTUS)" 4. set it connection 5. select a profile in the "model name" field. (AIO16, AIO32, DIO16, DIO16AIO8, DIO32, DIO32AIO16, DIO64, DIO64AIO16) 6. assign a devcie name to it. 7. assign a Modbus NetID to it. Related changes are including... Add VAR_UPDATE_DIO_BUF_BYTE, VAR_UPDATE_AIO_BUF macros for working with Modbus RTU slave function in Ladder mode. Change the DioDirty and AioDirty to DWORD type. char* mrs_GetDIOBuf(unsigned char NetID, DWORD *DioDirty); WORD* mrs_GetAIOBuf(unsigned char NetID, DWORD *AioDirty); Add mrs_GetIOStatus function for getting Modbus RTU slave IO status. // The DIO/AIO status flag is cleared after calling this function. // // NetID : NetID of the TouchPAD (in slave mode). // Return: The DIO and AIO status in DWORD value. // bit 0 = 1 : Dirty/updated by remote client. // bit 1 = 1 : Dirty/updated by remote client. DWORD mrs_GetIOStatus(unsigned char NetID); Change connection interface from "UART" & "TCPIP" to "COM1", "COM2", "COM3", "XBus", "CAN" and "TCPIP". Change protocol from "UART", "MTCP" to "DCON", "MTCPM", "MTCPS" (not supported yet), "MRTUM", "MRTUS". Add: Add callback function (max. 5 functions) in MiniOS8 and lib. These functions are used to support Modbus RTU slave function in Ladder mode. After register the callback function, these functions will be executed about every 10 ms. // fun : user's callback function wake up about every 10 ms. // iParam : Parameter pass to user's callback function when called. // iRemove: Index number of the callback function to be removed. // This index function is returned when call hmi_AddHighSpeedCallback(). // return : -1 = Error, // 0 ~ 4 = index of the removed function. typedef int (*PFN_HSCallback)(int iParam); int hmi_AddHighSpeedCallback(PFN_HSCallback fun, int iParam); int hmi_RemoveHighSpeedCallback(int iRemove); *** Warning: *** The TouchPAD is single-task system. User's program or callback function should not block the system for a long time. Add: Show message to update MiniOS8 when HMIWorks is first time running. Add: Show warning message before download firmware to TPD-280 via RS-485. All other RS-485 devices should be offline, to prevent malfunction and prevent downloading failure. Fix: Fix a bug in TCP receive function that does not process buffer correctly. Add: Add hmi_TCPTimeoutBeep() for debugging. // Enable/Disable beep when TCP timeout or error. // iConfig : 0 = Disable, others = Enable void hmi_TCPTimeoutBeep(int iConfig); Add: Add HMI_TCP_TIMEOUT_BEEP configuration in include/hmi_options.h. // This is used to enable/disable the beep when TCP timeout/error. // This should be used for debug only. // This feature is supported for TPD-283 only. #define HMI_TCP_TIMEOUT_BEEP 1 // 0 = Disable (default), 1 = Beep when TCP timeout/error. Change: Change the version of MiniOS8 to v1.0.6. ================================================================= v2.04.06, Feb.06, 2012 (MiniOS8 v1.0.5) Note: For working with HMIWorks v2.04.06, the TPD-280U/430 and VPD-130 models have to update MiniOS8 to v1.0.5, Feb.06, 2012 or last. Add: Add new functions that supports timeout parameters in ms unit. int hmi_TCPReadEx(tHandle h, unsigned char *buf, int buf_len, DWORD timeout); int hmi_TCPSendCmdEx(tHandle h, unsigned char *send_data, int send_data_len, unsigned char *recv_data, int recv_data_len, DWORD timeout); Fix: The TX/RX buffer length is sometimes wrong computed, and can sometimes cause timeout when receive. Fixed in MiniOS8 v1.0.5. Fix: Tune the performance of the Modbus RTU Master/Slave API functions. Now, the average response time is about 30 ms for the Modbus RTU slave function. ================================================================= v2.04.05, Jan.05, 2012 Add: Add comment function in Lader Designer. Fix: Improves the stability of the slider widget. New functions are added: Press the slider widget 500 ms to lock it, click again to unlock. Double-click the slider widget to lock it, click again to unlock. Fix: Fix buffer overflow bug in the hmi_TCPRead() function. ================================================================= v2.04.04, Dec.13, 2011 (MiniOS8 v1.0.4) Note: The MiniOS8 of TPD-280U/430 and VPD-130 must be updated to version v1.0.4 (Dec.13, 2011) or last. This is required when using HMIWorks v2.04.04, or the firmware will not work. Change: Improve the speed of drawing background for TPD-280U/430 and VPD-130. The MiniOS8 must be updated to v1.0.4 (Dec.13, 2011). Add: Add new function in Code Editor. Support Indent/UnIndent, Comment/Uncomment under edit menu. Add: Add uart_Purge() function for TPD-280/280U/430 and VPD-130. The MiniOS8 must be updated. // 0 = no clear, 1 or other values = clear the buffer // ClearTx is for output buffer, while the ClearRx is for input buffer. // return: none int uart_Purge(HANDLE hPort, int ClearTx, int ClearRx); Fix: Timer widget executes callback function in wrong interval after enable/disable the timer. Fixed. Add: Add TimerIntervalSet() and TimerIntervalGet() fucntions. // Get the timer's target value in ms unsigned long TimerIntervalGet(tTimer *pTimer); // Reset the timer's target value in ms. (The internal tick count is also reset) void TimerIntervalSet(tTimer *pTimer, unsigned long ulInterval); For example: TimerIntervalSet(&Timer10, 2000); ulVal = TimerIntervalGet(&Timer10); ================================================================= v2.04.03, Nov.29, 2011 Change: Modify the Code Editor to support tab (3 chars). Add: Add some functions in the Code Editor. Show line numbers. Add Find/Find Next/Find Previous/Replace functions. Add Goto line function. Add: Supports OnRelease event for bitButton, TextPushButton, HotSpot. Thus user can write his code for the button release event. ================================================================= v2.04 Beta 2, Nov.23, 2011 Add: Supports Modbus RTU Slave functions in C code. For TPD-280/280U/430 and VPD-130. // NetID : 1 ~ 247 // Each char in pDioBuf contains 8-ch DIO data. // The spaces pointered by DioBuf and AioBuf are allocated by user. // Currently, we support only 1 slave device in a TouchPAD. // Set 0 to both DIO_ch_count and AIO_ch_count to unregister that slave device. // Return: TRUE = OK, FALSE = Parameter Error. BOOL mrs_RegisterSlave(unsigned char NetID, WORD DIO_StartAddr, WORD DIO_count, char *pcDioBuf, WORD AIO_StartAddr, WORD AIO_count, WORD *pwAioBuf); // Process the Modbus RTU command (suggested in each 30 ms). // Return: bit 0 = DIO is updated, bit 1 = AIO is updated. // bit 31 = Error (0x8000 0000), bit 8 = Read DI, bit 9 = Read AI unsigned long mrs_ProcessCmd(HANDLE hPort); Add: Supports MRU (Most Recently Used) project files list under the "Reopen" menu item. Add: Add Invert01 function block in math category. It inverts the VAR value from 0 to 1, and 1 to 0. Add: Add Set_Write_Flag function block in system category. It sets the write flag of a VAR (touch it), and cause it to update the remote device again with the same value. This can be used when the remote device is reboot and need to be initialized again. Add: Supports M-7019R, M-7019Z modules. Fix: Allowing user to change the mapped function of a event to a new function. This still useful when using widget array to share a single function. To change a linked function name, user have to double-click on the new function in Code Editor. Single-click (selection) will not cause change. Fix: Function Block "BacklightSet" supports 0 and 255 only. Fix the function block to support brightness 0 ~ 255 for TPD-430. ================================================================= v2.04 Beta 1, Nov.16, 2011 Add: Add BacklightSet function block in system category. This should be used for all TochPAD series. The version of MiniOS8 (TPD-280U/430 and VPD-130) must be Aug.15, 2011 or last. Add: Add some Valve pictures in Misc library. Add some Boiler, Robot and Conveyor pictures in Machine library. Add: Add new function FloatToStr(). // buf : String buffer allocated by user // fVal : Floating value assigned by user // Precision: 0 ~ 5 assigned by user // Return : 0 (false), 1 (OK) int FloatToStr(char *buf, float fVal, int precision); example: static char szMsg[20]; FloatToStr(szMsg, -10503.9995, 3); LabelTextSet(&Label4, szMsg); // This shows -10504.000 on Label4 Fix: Compile error when using Modbus RTU DI only. Fixed. Fix: Math functions (such as log/exp/pow...) causes link error. Fixed. Fix: The BitButton sometimes shows garbage image. Fixed. Fix: The data format of serial port cannot be changed correctly. Fixed. The MiniOS8 of TPD-280U/430 and VPD-130 must be updated (Oct.24, 2011) for it. The TPD-280.a library file must be updated for it. Fix: Last frame may still existing when using HotSpot to change page. Fixed. Change: Check project location if contains invalid chars. Show error message when creating project in souch folder path. We would suggest to use A ~ Z, a ~ z, 0 ~ 9, _ chars. Change: Check the IP address assigned for the TouchPAD. The 4th number cannot be 0 (net) and 255 (broadcast). ================================================================= ================================================================= v2.03 (Standard Release), Oct.12, 2011 (MiniOS8 v1.0.3) Note: It is required to update MiniOS8 of TPD-280U/430 and VPD-130 to v1.0.3 when using HMIWorks v2.03, since the internal flash data structure has something different. Change: Update MiniOS8 of TPD-280U/430 and VPD-130 to version v1.0.3. Change: Update calibrate program for TPD-280/283 and TPD-280U. Change: Change the name of "PanelKey" function block in VPD-130 category to "GetPanelKey". Change: Move "Equal" and "OnChange" function blocks from user_define to default category. Change: Small change in settings of the USB driver. Fix: New tag may not be saved and causes missing. Fixed. Fix: The OnClick event name can be wrong changed just by selecting another function before exiting the Code Editor. Fixed. Fix: Show message when a function block is not well configured, not just skip it. Fixed. Fix: Some function blocks missing the write-flag, and cause DO does not work. Fixed. Fix: Cannot insert Coil in some rung. Fixed. Fix: Cannot copy a rung in the Ladder Designer, fixed. Fix: Show message when download failed, not just disappered. Fixed. Add: Add Function Block "Get_Date_Time" and "Set_Date_Time" in "system" category. ================================================================= v2.03 beta 6, Sep.20, 2011 Change: Change the default widget name without the 'Widget' string. These make the widget name shorter (nice for C programmer when typing). CheckBoxWidgetxx, LabelWidgetxx, SliderWidgetxx, HotSpotWidgetxx ==> CheckBoxxx, Labelxx, Sliderxx, HotSpotxx. These class names for widgets are not changed, and have no compatibility issue between old and new versions. Add: Support creating new connection when adding device. Select "Create New..." in the connection drop-down list box to bring up the ConnectionForm. Add: Auto-assign device name after selecting a model name. Change: Filter off the module types in Device form preventing wrong selection. For example: TPD-283 supports modules with Modbus TCP protocol only. Change: Supports more pictures for CheckBox widget (in ladder mode). Use a virtual tag (linked in TagName) to indicate which picture should be display (in the ObjList). The valid range of the index (virtual tag value) should be between 0 and (picture-count -1), else the index will be equal to (virtual-tag-value mod picture-count). ================================================================= v2.03 beta 5, Sep.16, 2011 Change: Update the USB driver to support 64-bit Windows 7/XP. Add: Add hmi_UserParamsGet() and hmi_UserParamsSet() functions to get/set the user parameter area in the MCU internal flash. There is write/erase times limitation, and does not suggested to use it frequently. The user parameter area is 256-byte size, and the iOffset + iSize cannot larger than 256. // iOffset : 0 ~ 255 // iSize : 0 ~ 255 // pcBuffer: User's data buffer // return : 1 (true) = OK, 0 (false) = Failure int hmi_UserParamsGet(int iOffset, int iSize, char *pcBuffer); int hmi_UserParamsSet(int iOffset, int iSize, char *pcBuffer); Change: The g_sParameters.UserParamsData area is no more available. Users should use the new hmi_UserParamsGet() and hmi_UserParamsSet() functions instead. Change: The hmi_UserFlashRead(), hmi_UserFlashWrite() support 1 block only. Users should use new hmi_UserFlashReadEx() and hmi_UserFlashWriteEx() functions instead. Add: Supports user configuration to enable read/write serial flash with larger range in TPD-280U/430 and VPD-130 models. Warning: 1. The serial flash is used to store user's application firmware. It can easily cause conflict if you don't know it very well. Users have to take care about the firmware size and the flash address. We would suggest users to leave 512 KB space between application and user's data area. 2. The serial flash has write/erase times limitation, and cannot be used frequently. These functions are for advanced users only. 3. These functions are working in block-operation. Users have to erase that block (to all 0xff) before write/update. Add new functions hmi_UserFlashConfig(), hmi_UserFlashReadEx() and hmi_UserFlashWriteEx(). // Configure how many number of serial flash blocks can be read/write by users. // Each block is 4 KB size, default is 1 block (4 KB) for users. // iNumberOfSectors: 1 ~ 1792 blocks = 4 KB ~ 7 MB (0 block = disable) // 1 block = 4 KB, 2 blocks = 8 KB, 4 blocks = 16 KB, 8 blocks = 32 KB // 256 blocks = 1 MB, 512 blocks = 2 MB, 768 blocks = 3 MB, 1024 blocks = 4 MB // 1280 blocks = 5 MB, 1536 blocks = 6 MB, 1792 blocks = 7 MB. // return: Number of blocks int hmi_UserFlashConfig(unsigned long iNumberOfBlocks) // Read data from the specified block of ther serial flash. // iBlock : Block index from 0 to iNumberOfBlocks - 1. // iOffset: Offset from user's data block in flash (0 ~ 4095) // iLength: Data length to read (1 ~ 4096) // pBuffer: Data buffer // return : Data length read, 0 (false) = failure unsigned long hmi_UserFlashReadEx(unsigned long iBlock, unsigned long iOffset, unsigned long iLength, char *pBuffer); // Write data to the specified block of ther serial flash. // iBlock : Block index from 0 to iNumberOfBlocks - 1. // iOffset: Offset from user's data block in flash (0 ~ 4095) // iLength: Data length to read (1 ~ 4096) // pBuffer: Data buffer // return : Data length written. unsigned long hmi_UserFlashWriteEx(unsigned long iBlock, unsigned long iOffset, unsigned long iLength, char *pBuffer); Change: The hmi_UserFlashErase() function now supports block-index parameter. // Erase the specified serial flash block to all 0xFF. // iBlock: 0 ~ iNumberOfBlocks -1 (configured by user) // return: TRUE = Success, 0 (FALSE) = Failure int hmi_UserFlashErase(unsigned long iBlock) ================================================================= v2.03 beta 4, Sep.14, 2011 Add: Shows "32-bit" or "64-bit" of Windows version in AboutBox. Add: Add OS/CPU/Project-Folder information in the project file for reference. Add: Supports thirdparty Modbus RTU devices by user-defined DI/DO/AI/AO. Change: Change the default UART timeout from 100 to 200 ms. The MiniOS8 of TPD-280U/430 and VPD-130 must be updated. ================================================================= v2.03 beta 3, Aug.26, 2011 Change: Rename some pictures, and add more pictures. Change: Change the LCD backlight auto-off time to 30 seconds. Add: Draw "X" in HMIWorks when the picture file is not exist. So we can find out the missing part easily in design time. Add: Check file existing and ask to overwrite when add picture into library. Add: Show picture size M x N, Z KB as reference under the preview box. Add: Enable drag&drop picture from library list directly, not only from the picture preview box. Fix: Update the io.hsf file of the PM-2133 device. Now, it works for different NetID instead of 1. ================================================================= v2.03 beta 2, Aug.23, 2011 Add: Add link to the [Pictures] folder in the project. So, each project can have its own pictures easily. Add: Add "Light(M), Light(S), Controller(M), Controller(S)" picture folders. Add some more pictures. Change: Move the "arrow" pictures into "Arrow(M)" and "Arrow(S)" folders. ("M" for middle size, "S" for small size.) Remove "sanlien, DL-100, DemoRoom, Integrated_Machine" picture folders. Note: Users have to assign new pictures for their projects. ================================================================= v2.03 beta 1, Aug.17, 2011 Add: Check the program image size and show error when the size is too large. Add: Auto fix the project name when the name contains space or special chars. Add: Auto-select a Landscape/portrait mode when creating new project. Add: Add tool information in the project file for reference. For example: Add: Supports screen saver function to auto-off the LCD backlight when idle. Configure the include\hmi_options.h file to enable this function. #define HMI_LCD_AUTO_OFF 0 // 0 = disable, 5 ~ 300 seconds #define HMI_LCD_ON_BEEP 1 // 0 = disable, 1 = Beep when LCD backlight is going on #define HMI_LCD_OFF_BEEP 1 // 0 = disable, 1 = Beep when LCD backlight is going off Note: The MiniOS8 of TPD-280U/430 and VPD-130 must be updated to Aug.15, 2011 or last. The MiniOS8 is included in bin\boot\(ModelName) folders. Fix: The uart_SetTimeout() does not work correctly, fixed. Note: The MiniOS8 of TPD-280U/430 and VPD-130 must be updated to Aug.15, 2011 or last. Fix: Buttons sometimes may not back to normal status, fxied. Note: The MiniOS8 of TPD-280U/430 and VPD-130 must be updated to Aug.15, 2011 or last. Fix: The CheckBox draws X in wrong place, fixed (TPD-280/283/280U). Note: The MiniOS8 of TPD-280U must be updated to Aug.15, 2011 or last. Fix: When calling hmi_GetDateTime() or hmi_SetDateTime() functions, compile operation fails. Fixed. Fix: Some I/O tags cannot work correctly under ladder mode. Fixed. Fix: M-7018Z's IO.hsf supports 8 channels only, fix it to 10 channels. Fixed. Add: Supports M-7017 module. ================================================================= ================================================================= v2.02 (Standard Release), Aug.02, 2011 Note:**************************** 1. This version of HMIWorks requires users to update the MiniOS8 of the TPD-280U/430 and VPD-130 to Jul.25, 2011 or the last version. 2. Users have to fix their ladder programs manually, since some of the pin names of the function blocks are changed. **************************** Fix: Improves the responsability of the HotSpot, BitButton/TextPushButton. Fix: Improves the responsability of the touch screen of the TPD-430. Add: Add copy/paste features in the Ladder Designer. Thus, we can copy a rung and and paste (insert) it to another line. Add: Add hmi_ConfigBeep(unsigned short usFreq, unsigned short usTicksMS) for TPD-430. usFreq: Frequency value of the Beep between 30 ~ 4,000. usTicksMS: Time value of the Beep between 1 ~ 30,000. Add: Add hmi_BacklightSet(unsigned char ucBrightness) for TPD-430. ucBrightness: 0=Dark... 255=Light Add: Add new configuration in the hmi_options.h for TPD-430. #define HMI_BEEP_FREQ 800 // The valild value should be 30 ~ 4,000 Hz (default 800 Hz). #define HMI_BEEP_MS 25 // The time length to beep (default 25 ms). #define HMI_LCD_BRIGHTNESS 255 // 0=Dark ... 255=Light #define HMI_STARTUP_LED 0 // 1=Enable red LED, 0 = Disable red LED ================================================================= v2.02 beta 3, Jul.25, 2011 Add: Set connection-name automatically. Disable the protocol selection and choose the correct one automatically. Fix: When I/O scan time (default 100 ms) is smaller than I/O timeout value, the system can than be blocked and causes no response to the touch screen. Modify the system to improve the responsability of the touch screen. Add: Add hmi_options.h for new option settings. The file is located in C:\ICPDAS\HMIWorks_Standard\include folder. This option file is effective for all projects. For single project options, users can copy the file and put it in the project folder. The modification to the option file in the project folder will be effecitve for that project only. Add: Supports watchdog function for TPD-280/283/280U/430 and VPD-130. Now, users can enable the hardware watchdog just by change the settings in the hmi_options.h file. #define HMI_WDT_ENABLE 0 // 1 = Enable, 0 = Disable (default) #define HMI_WDT_TIMEOUT 2000 // about 2,000 ms to reboot (Valid 1,000 ~ 50,000 ms) // about 500 ms to clear WDT & preventing reboot #define HMI_WDT_CLEAR (HMI_WDT_TIMEOUT / 4) A simple C code as following can be used to test the watchdog function. while (1) ; // infinite loop to block the system Add: Supports startup-delay before enable the LCD, this reduces the power requirement at boot time. This may be used when small power supply is installed for the TouchPAD device. Users can enable this feature just by change the setting in the hmi_options.h file. #define HMI_STARTUP_DELAY 0 // delay ms, 0 = no delay Add: Supports startup-beep and touch-beep settings in the hmi_options.h file. #define HMI_STARTUP_BEEP 1 // 1 = Beep when startup, 0 = disable #define HMI_TOUCH_BEEP 0 // 1 = Beep each touch, 0 = disable Add: Supports auto-reconnect for Modbus TCP. When I/O devices is online again, it may takes about 5 seconds to auto-reconnect. Fix: When change the frame pages, the DO may be output again with the same value. fix it. Add: Add hmi_DelayUS() function for delay a while. The unit is us. Change: Gives more reasonable pin names for some function blocks. Note: Users have to fix their ladder programs manually. converter\KTYPE in1 ==> AIValue out1 ==> IntResult out2 ==> DecResult Timer\TON, TOFF value ==> DelayMS user_define\GotoFrame in ==> FrameNum user_define\CurrentFrame out ==> CurrFrame user_define\Timeout_To_Action in ==> msec user_define\WORD2Float in1 ==> inWordL in2 ==> inWordH in3 ==> inGain1K out1 ==> outFloat user_define\Float2WORD in1 ==> inVal in2 ==> inDiv1K out1 ==> outWordL out2 ==> outWordH user_define\WORD2DWORD in1 ==> inWordL in2 ==> inWordH out1 ==> outDWORD user_define\DWORD2WORD in1 ==> inDWORD out1 ==> outWordL out2 ==> outWordH Fix: In standard C programming mode, the CheckBox status does not correctly passed into the callback function. The bSelected parameter is always a wrong value. Fix the problem in this version. ================================================================= v2.02 beta 2, Jun.23, 2011 Fix: Label widget may shows wrong fixed point decimal value, fix it. Add: Add VAR_GET_WRITE_BYTE() function to simplify the writing of IO script. if( VAR_FLAG_IS_WRITE($DO0) ) iWrite++; if( VAR_VALUE($DO0) ) v_do |= (1<<0); ==> iWrite += VAR_GET_WRITE_BYTE(&v_do, $DO2, 2); Fix: Clear the TCP input buffer before sending Modbus TCP commands. This reduces errors when I/O device sometimes have small delay in reponses. ================================================================= v2.02 beta 1, Jun.16, 2011 Add: Modbus RTU master API functions in library for TPD-280/280U/430 and VPD-130. BOOL mrm_ReadAI( HANDLE hPort, int NetID, int StartAddress, int channel_count, WORD *data); BOOL mrm_ReadAO( HANDLE hPort, int NetID, int StartAddress, int channel_count, WORD *data); BOOL mrm_WriteAO(HANDLE hPort, int NetID, int StartAddress, int channel_count, WORD *data); // Each AI/AO channel uses a WORD type to store a data. BOOL mrm_ReadDI( HANDLE hPort, int NetID, int StartAddress, int channel_count, char *data); BOOL mrm_ReadDO( HANDLE hPort, int NetID, int StartAddress, int channel_count, char *data); BOOL mrm_WriteDO(HANDLE hPort, int NetID, int StartAddress, int channel_count, char *data); // Each 8-channel DI/DO uses a char to store the data. Channel 0 ~ 7 are stored in data[0], channel 8 ~ 15 are stored in data[1], ... Add: Add M7K_AnalogHexToLongK() function to convert the binary data of the M-7000 to readable value. The value is retured in *1000. The function is used for M-7000 series modules, not for other devices. long M7K_AnalogHexToLongK(char M7K_ModuleID[], short TypeCode, short HexVal); // return value * 1000 The M7K_ModuleID is passed in string format, for example: "7015" (for M-7015 module). The TypeCode indicates the used value range, then the function can know how to convert it. Refer to the TypeCode.txt in the M-7000 folder for detailed type-code and value ranges. The HexVal is the raw data returned from the M-7000 in 2'complement format. Fix: Clear the serial input buffer before sending DCON or Modbus RTU commands. TPD-280 should update the library, while the TPD-280U/TPD-430 should update the MiniOS8. Change: Change the name of the pop up menu items. Edit/Delete I/O Channel ==> Edit/Delete I/O Tag Edit/Delete Virtual Channel ==> Edit/Delete Virtual Tag Add: Add FloatToU32() and U32ToFloat() functions for converting the data format. ================================================================= ================================================================= v2.01 (standard release) Jun.03, 2011 Add: Add hmi_GetTickCount() function that returns system tick count in ms unit. The resolution is about 10 ms. This function is based on fixed time interval of 100 ticks/second. Change: Remove the DemoRoom2 graphic library. Add: Add Button(M), Button(S), Machine(M), Machine(S), Misc(M), Misc(S), Switch(M) and Switch(S) graphic libraries. The (M) stands for middle size, while the (S) stands for small size. Add: Add math/Scaling function block. Add: Add CPU information in the AboutBox of the HMIWorks. ================================================================= v2.01 beta 7 May.27, 2011 Fix: Check the serial ports by "ReadOnly", to prevent requiring administrator account under Windows 7. Change: Change some menu items to make it more readable. Add: Put the HMIWorks Standard in the exception list of firewall of the Windows XP SP2 (and lastest). This prevents the system to block off the UDP search from the HMIWorks. Add: Add batch files for the TPD-280 calibration programs. User can select COM1 ~ COM9 to download the program when using the batch file. Add: Add new functions for the timer widget. // 0 (FALSE) = disable, 1 (TRUE) = Enable int TimerEnabledGet(tTimer *pTimer); void TimerEnabledSet(tTimer *pTimer, int flag); Add: PET-7052, PET-7005. ================================================================= v2.01 beta 6 May.12, 2011 Fix: The portrait calibration program of the TPD-280U does not work correctly. Fix the portrait calibration program. The portrait and landscape data should be re-calibrated. Note: TPD-280U should be released soon! Fix: The MiniOS8 has debug message output from the serial port. Fix it for TPD-280U, TPD-430 and VPD-130. Note: The TPD-280U, TPD-430 and VPD-130 models should be released soon! Change: Move the write operation to first. Skip read operaion when there is writing operation in this loop. Add: Check the connection and device name strings. The valid chars are a~z, A~Z, 0~9 and _. The name cannot use digital as leading char. ============================================================================ v2.01 beta 5 (May.03, 2011) Add: TPD-430 now supports hmi_UserFlashErase(), hmi_UserFlashRead() and hmi_UserFlashWrite() functions. The user flash space is 4KB size, and is the lastest sector of the external flash disk of the TPD-430. The flash has 100,000 erase/program cycles limitation. For more information, see TPD430_UserFlash demo program. Change: Modify the OS of TPD-430, TPD-280U, VPD-130 to record AI values (DCON protocol) even the AI values are +9999.9 (for error). Add: Check the loaded project if the ENABLE_DI, ENABLE_DO, ENABLE_AI, ENABLE_AO, ERROR, ENABLE_DEVICE new tags are available or not. If not, add the related new tags automatically. This prevent old project compile error caused by new tags not found. ============================================================================ v2.01 beta 4 (Apr.28, 2011) Fix: The virtual tag cannot used to set DO output correctly. Fix the problem is this version. The pulse mode of coil output is also fixed. Change: Remove some duplicated or big size pictures from the library. PM-2133, PowerMeter, Excellence, TPD430_DemoRoom and TPD430_DigitalClock picture folders are now removed. These pictures will be moved into its related demo program folder. Add: Ask save before exit the Ladder Designer. Ask confirm before creating new ladder project. Add Ctrl+K to save & close the ladder project. Auto-save when new or open another TouchPAD project. Change: Modify the TPD-280 library to record AI values (DCON protocol) even the AI values are +9999.9 (for error). ============================================================================ v2.01 beta 3 (Apr.21, 2011) Add: Add function blocks WORD2DWORD, DWORD2WORD, WORD2Float, Float2WORD. Add: Support "ERROR" tag for RS-485 I/O modules (I-7000/M-7000). 0=OK, 1=Error! Add: Support "ENABLE_DEVICE" tag for all I/O modules. User can modify the tag value to 0 to disable this device in the project. This would be useful when debugging the project without remove the device. Fix: The BitButton and TextPushButton switch the frame immediatly when button clicked. Modify the operation of switch frames when button released. This problem is occurred from beta1. Fix: The CheckBox's picture may disapper when switch frame. Fix the problem coming from beta1. Add: Add a "ADDR_BASE" tag to record the address is base 0 or 1. Now, the device import form can show tags in protocol address(base 0) or PLC address 1, instead of always in protocol address. Fix: The TagName selection form has 20-byte limitation of the TagName size. Change it to 60 bytes. ============================================================================ v2.01 beta 2 (Apr.15, 2011) Add: Add HotSpotLastXGet(tHotSpot*) and HotSpotLastYGet(tHotSpot*) to get the last clicked position X, Y. Add: Add "ERROR" tag for Ethernet I/O devices. The "ERROR" tag should be 0 for indicating OK, while 1 indicating failure. ============================================================================ v2.01 beta (Apr.14, 2011) Add: Add new widget type name. (Widget Name) (Old Type Name) (New Type Name) ============== ================= =============== BitButton : tPushButtonWidget ==> tBitButton TextPushButton: tPushButtonWidget (Text type) ==> tTextButton tPushObjectWidget (ObjRef type) ==> tObjButton LabelWidget : tCanvasWidget ==> tLabel SliderWidget : tSliderWidget ==> tSlider CheckBoxWidget: tCheckBoxWidget ==> tCheckBox HotSpotWidget : tHotSpotWidget ==> tHotSpot The old widget type names are still available for compatibility. But it is recommended to use new type names in new projects. Note: tBitButton and tTextButton has the same type structure, but they are different with the tObjButton structure. Add: Add text functions for some widgets. The following functions are used to set/get a static string to/from the text properity. The widget has no buffer for the text, so the string must be static string (static char[]). LabelTextGet(tLabel*); LabelTextSet(tLabel*, const char *); TextButtonTextGet(tLabel*); TextButtonTextSet(tTextButton*, const char*); These functions also repaint the widget it-self automatically. Note: Currently the CheckBoxTextSet() does not work correctly. Will fix the problem in next version. Add: Add "Tag" properity for TextPushButton(BitButton, TextButton, ObjButton), CheckBox, Slider, HotSpot. We can set the tag properity in design time, and then read the properity in run-time. The "Tag" properity would be useful when using several widgets with a single event function. This properity indicates which widget is clicked in this time. This looks like a widget array indicator. The following functions are used to set/get Tag properity of widgets. BitButtonTagGet(tBitButton*); BitButtonTagSet(tBitButton*, int); TextButtonTagGet(tTextButton*); TextButtonTagSet(tTextButton*, int); ObjButtonTagGet(tObjButton*); ObjButtonTagSet(tObjButton*, int); CheckBoxTagGet(tCheckBox*); CheckBoxTagSet(tCheckBox*, int); SliderTagGet(tSlider*); SliderTagSet(tSlider*, int); HotSpotTagGet(tHotSpot*); HotSpotTagSet(tHotSpot*, int); Add: Add "TagName" properity for TextPushButton(BitButton, TextButton, ObjButton) and HotSpot. The "TagName" properity can link to a tag variable (for example: virtual tag). While the object is clicked, then the tag variable is set to 1. While the object is released, then the tag variable is set to 0. Several widget can link to a single tag variable for exchange the status. For example: TextButton is clicked, then a Label shows 1 when these two widgets link to the same tag variable. Add: Add the following macros for accessing Tag and Text properities. WIDGET_TAG(widget) PWIDGET_TAG(widget*) WIDGET_TEXT(widget) PWIDGET_TEXT(widget*) Add: Support multi-switching of DO and AO with several clients. The new architecture is to read back DO/AO first, and then write DO/AO depending on change instead of always write DO/AO. The IO.hsf should use VAR_GET_WRITE_DATA() to get the data to be written, instead of use VAR_VALUE() to get current data. Refer to the bin\Modules\PET-7000\PET-7060\IO.hsf for DO example. Refer to the bin\Modules\PET-7000\PET-7026\IO.hsf for AO example. Add: Add ENABLE_DI, ENABLE_DO, ENABLE_AI, ENABLE_AO virtual tags. Users can use these tags to enable/disable DI/DO/AI/AO functions, instead of always polling these values that may not used in a project. This reduces network loading and improves the performance of a TouchPAD. Refer to the bin\Modules\PET-7000\PET-7060\IO.hsf to support these tags. Users should renew the device by... Modbus TCP mode: 1. Right-click mouse button on the device in the workspace and select "Edit Device" in the pop up menu. 2. Click the "Edit" button and verify the start address and channels. 3. Click "OK". 4. Click "Yes" to delete existing tags. PET-7000 module mode: 1. Right-click mouse button on the device in the workspace and select "Edit Device" in the pop up menu. 2. Click the "Search" button and select the module name again. 3. Click "OK". 4. Click "Yes" to delete existing tags. Fix: Remove the Net ID checking on the Modbus TCP response. Therefore, Modbus TCP device can have any Net ID instead of 1. Fix: MB_WRITEDO() does not work correctly when writing a single bit DO. Fix the problem in this version. Fix: The DO channels will be off when TouchPAD connected. Fix the problem in this version. Fix: Wrong sub-net mask and gateway IP is used in statick IP mode. Fix the problem in this version. // The followings are minor updates. Fix: Fix the start address displayed in the device window. The previous verion always shows 0 for each channel. The start address is still not used in predefined I/O modules, since the address is hard coded in the IO.hsf files. Add: Add hot-key "ctrl+K" for "Save & Close" in the code editor. The "OK" button in the code editor window now supports auto-save function. So, users can just have one click on the "OK" button to save & close the file. Change: Disable the MODBUS_WAIT() function in mb_master.h. When the Modbus TCP I/O device is offline, the MODBUS_WAIT() function can block the TouchPAD and shows blank screen. Users can still enable this function by modify the mb_master.h file. Add: Add TPD-430 LED control function. hmi_SetLED( HMI_LED_ON ); hmi_SetLED( HMI_LED_OFF ); Fix: Set TPD-283 Ethernet LED as Link/ACT, instead of disable. Add: Add menu item "Run / Download File (bin)". This function can be used to download a firmware (.bin or .bix) directly without it's full project and source code. This should be useful when asking end user to update a program to TouchPAD while we don't want to release a source to end user. This function still have limitations, since the HMIWorks have to know the information related to the TouchPAD first and then can download it through the correct interface and configuration. Thus, an empty project (or demo project) with correct TouchPAD information is required. ============================================================================ v2.00 Release, Feb.17, 2011 ============================================================================ ============================================================================