ICPDAS BBSICP DAS 产品专区产品技术专区 有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbus指令编码.

1  /  1  页   1 跳转 查看:1147

有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbus指令编码.

有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbus指令编码.

1、DCON.OCX问题.
曾在鸿格旧论坛上反映过,就是有关设置通讯串口的参数时候,只有无校验、奇校验模式,没有偶校验.虽然论坛版主提供了间接的解决办法,直接设置UART.DLL的串口参数,但是使用上还是非常麻烦.
版主说新版会修改,但一直关注新版也没有发现更新和升级.

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通讯模式也无法使用.

3、因为MODBUS指令的发出,采用的是BIN 二进制方式发出,对MODBUS指令编码后,每次尾部被强制加上了两个字节数据,但经过验证,也非MODBUS 的CRC标准校验码,所以此码的产生非常疑惑.

希望版主尽快协调升级此控件和动态库,让此控件及库更加完美.(当然如果能提供它们的源码是最好.)

联系邮箱:bh2171@163.com    QQ:308997709  欢迎交流.
最后编辑bh2171 最后编辑于 2010-04-22 08:51:42
 

回复:有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbu...

今天早上下载了最新的 DCON_Utility功能软件.
将其中的UART.DLL和I7000.DLL替换我原作试验的DLL(也是在网站上DCON_DLL目录下载最新的DLL)..
终于发现是自动加上的CRC校验码,原来的DLL动态库的校验码是错误的,可能是试验性质的,替换后的DLL库,显示的CRC校验码是正确的了.
而且校验码是自动加上去的,无法消除的.

建议,1、要么将CRC校验码子程序分离出UART.DLL库,由I7000.dll库去计算,将send_receive_bin命令完全独立.
2、要么发布一个相当于send_receive_bin的类似指令,由用户自己去编码,
这样就可以使用动态库实现既可以发出文本指令,
也可以发出ASCII码BIN二进制指令(用户可以自定义编码)的通用功能,
 

回复:有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbu...

虽然更新了UART.DLL等库,但是发现send_receive_bin无法正常使用,能够发送出去编码,但是无法接收到编码,监测串口状态是已经有返回通讯编码了.
最后用send_bin  和receive_bin 两个命令组合使用才接收到通讯编码.
使用上非常麻烦,如果DONX.OCX控件能够升级下就好了.
 

回复:有关使用DCON.ocx控件,I7000.DLL组件、UART.DLL组件的问题.无法发出modbu...

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 編譯器開發.
 
1  /  1  页   1 跳转

版权所有 ICPDAS BBS  ICPDAS CHINA

Powered by Discuz!NT 2.1.202    Copyright © 2001-2010 Comsenz Inc.
Processed in 0.078125 second(s) , 5 queries.
返顶部