发布于 2008-08-20 21:57:45
0楼
首先感谢各位朋友参与讨论.这个问题已获得初步解决.我把主要心得做个总结如下,供其他朋友参考.
第一,要注意学习西门子的两篇中文文档"CP340_341_440_441_通讯及编程.pdf"和"串口通讯模块的信息和使用.pdf".这两篇文档介绍的比较详细.关于CP341如果做MODBUS通讯需要主站和从站的狗以及驱动程序下载方法,还有例程的编制步骤(例程并不需要自己再编,随这些文档有打包),需要掌握这些基本知识.
第二,我被卡的第一点是RS485/232转换器上.导致我困惑了很久.按常例,做MODBUS 通讯先用PC做个仿真,测试一下程序比较好吧,如果这样,RS232/465转换器是必定要用的.我以前用其他家产品做的,基本没有问题.我这次按老经验做,没有怀疑原来的转换器.但是实际主要问题恰恰在此.我实验了几家也不算很无名的公司产品(在网上都能查到),顺利解决问题只有MOXA公司(台湾生产)的RS485光纤转换器.不需要接地线.仅用4,11号线就可以.使用北京三威讯通的RS485/232转换器效果是CP341发送没有问题,但是收到的数据乱七八糟.使用武汉波仕卡的RS232/485转换器收发都不行,使用武汉波仕卡的RS485光纤转换器CP341那边是可以接收,不能发送.但是这几种产品之间互相做通讯一点问题没有.我的感受是CP341做RS485适应性很窄,大家要小心选择通讯伙伴的产品.
第三.我被卡的第二点是没有注意功能块FB7,FB8的使能端需要人为设置,调试程序可以在变量表强制置位使能,达到启动接收和发送指令的目的.这部分内容在上述的文档有介绍,我由于屡试不爽而忽略了这段描述.
第四,许多朋友建议,做MODBUS前先做ASCII通讯是非常正确的.便于检查问题所在.我后来也是回到最初级的做法,发现和检验了转换器的问题,最后一步做通.
目前我做MODBUS通讯无论主站和从站初步做通,常用的功能03,06都可以.但是功能16没有做好.我将另发帖子请教高人.
这些总结供朋友参考.