Dear Sir:
1、DCON.OCX问题.
曾在鸿格旧论坛上反映过,就是有关设置通讯串口的参数时候,只有无校验、奇校验模式,没有偶校验.虽然论坛版主提供了间接的解决办法,直接设置UART.DLL的串口参数,但是使用上还是非常麻烦.
版主说新版会修改,但一直关注新版也没有发现更新和升级.
有關 parity 設定可以到
ftp://ftp.icpdas.com/pub/cd/8000cd/napdos/driver/dcon_dll/driver/vc5/uart.h Open_Com 裡面有說明如何設置 Parity
EXPORTS WORD CALLBACK Open_Com(unsigned char cPort, DWORD dwBaudrate, char cData, char cParity, char cStop);
/*********************** Open_Com ********************************/
/* This function is used to configure and open the COM port */
/* cPort: 1~255 */
/* dwBaudrate: 150,300,600,1200,2400,4800,9600,19200,38400, */
/* 57600,115200,230400,460800,921600 */
/* cData: 5,6,7,8 */
/* cParity: 0 ==> Non Parity (NonParity) */
/* 1 ==> Odd Parity (OddParity) */
/* 2 ==> Even Parity (EvenParity) */
/* 3 ==> Mark Parity (MarkParity) */
/* 4 ==> Space Parity (SpaceParity) */
/* cStop 0 ==> 1 Stop Bit (OneStopBit) */
/* 1 ==> 1.5 Stop Bit (One5StopBit) */
/* 2 ==> 2 Stop Bit (TwoStopBit) */
/* Return NoError : OK */
/* Others : Error code */
/*****************************************************************/
2、I7000.DLL 、UART.DLL 的问题.
因为ocx控件的问题无法直接解决,没有办法只有直接使用I7000.DLL和UART.DLL动态库.
对于串口通讯参数的修改使用是没问题了.
但是发现指令的发送接收上又出现了问题,
一般串口通讯有两种工作模式,一种是文本命令通讯模式,一种是ASCII BIN工作模式.
而且BIN二进制工作模式使用是比较多也是比较可靠的.
使用中发现文本命令模式使用 send_receive_cmd 指令发送接收,使用上还是可以的.
当使用ASCII BIN模式时,就只能使用send_receive_bin指令发送接收,在发出的指令当中,能够正确发送出指令,但是就是与相关通讯部件通讯不上,经过串口监控软件的监测才发现,在所发出的指令背后,总被强制加上了两个字节的通讯码,不管如何修改发出的通讯编码,尾部总被随机加上了两个字节编码,当然前半部分通讯码固定,尾部强加的码也固定.
不管如何修改程序和通讯协议码,都被强加了两个编码,(VB的编程,反复检查非自编程序问题,也关闭了checksum等自动校准检查编码)造成通讯码无法与通讯部件通讯上.
这样也间接造成了dcon.ocx控件的bin通讯模式也无法使用.
==> 有關 Send_Receive_Cmd 這個 function 是泓格 專門處理 DCON Protocol 系列產品通訊專用, 這個 function 會自動在發送的結尾加上 CR 字尾, 如果參數 checksum 有被指定要做
checksum 檢查 , Send_Receive_Cmd 會在發送之前加上 checksum 再補上 CR 結尾 , 在接收資料的時候也會檢查回傳字串的 checksum 是否正確,然後反應在 error code ( error code 7 )
==> 至於 Send_Receive_Binary 這個 function 是泓格專門用來處理 Modbus RTU 系列產品通訊專用, 這個 function 會自動在發送的結尾加上 CRC 兩個 bytes,
, 在接收資料的時候也會檢查回傳資料的 CRC 是否正確
上述兩個 function 都是針對泓格自家產品特別設計不是泛用型的 function. 一般如果是針對 ASCII 字元的DCON 模組通訊,
我們是建議使用 Send_Receive_Cmd 至於 modbus RTU 模組則是使用 Send_Receive_Binary ,
至於BIN二进制工作模式使用是比较多也是比较可靠的這個可能是個人的喜好吧,因為 Serial Port 通訊實際上通訊都是 binary 的資料,
即使是 DCON Command 最後也是轉成 binary資料.
3、因为MODBUS指令的发出,采用的是BIN 二进制方式发出,对MODBUS指令编码后,每次尾部被强制加上了两个字节数据,但经过验证,也非MODBUS 的CRC标准校验码,所以此码的产生非常疑惑.
==> 剛才有提到 Send_Receive_Binary 是專門用來處理 modbus RTU 通訊,所以 CRC 檢查碼自然就是由 Send_Receive_Binary 來處理,所以會強制在後面加上 CRC 檢查碼
另外提到 I7000.dll 本身只處理 DCON 命令,並不支援 modbus 命令的發送與接收,至於 I7000 dll 本身也不再進行更新,如果覺得 I7000 dll 有不足的地方我們有提供完整的原始碼供客戶自行下載.
ftp://ftp.icpdas.com/pub/cd/8000cd/napdos/driver/dcon_dll/driver/ 您可以根據自己的需求擴充. I7000 dll 本身是由 VC 6.0 編譯器開發.