| 作者 | 主题 |
|---|---|
|
老石 游民 经验值:93 发帖数:47 精华帖:3 |
楼主
主题:CP341MODBUS__Slave(RS485)通讯失败请教列位朋友会诊
硬件CPU-314,CP341(RS422/485型带Slave狗),西门子15针通讯电缆。北京三威讯通RS485/232转换器。
手头资料:CP340_341_440_441_通讯及编程.pdf,串口通讯模块的信息与使用.pdf,CP341点对点通讯安装和参数分配(英文).pdf,Modbus_Slave.pdf,Modbus_Master.pdf。PtP通讯例程。已经认真学习。 网上课堂,技术论坛,找答案,相关文章已阅,有两篇与我相似,但是无答案。也已请教技术支持人员,说不好判断。所以再发贴请列位会诊。 做法:“PtP通讯例程”MODBUS__Slave由于是CPU315DP,RS232/ASCII,所以根据手头硬件在此基础上做两处修改。CPU修改为314,通讯协议修改为MODBUS__Slave,并在协议中选择“半双工RS485”,R(A)--0V,R(B)--5V。OB1和其他模块维持原有状态。 硬件连接:15针通讯电缆插入CP341,找一个9孔插头,靠15针接头的一边套入,保证能与15针接头的4,11脚连接,并在9孔插头焊接两根导线(与15针接头的4,11脚连接)引出,然后与RS485/232转换器的RS485端子连接。RS485/232转换器与PC—COM口连接。 通讯结果:使用仿真测试程序(modscan32),CP341上面RXD灯随仿真测试程序指令信号闪一下(SF灯不亮,TXD灯没动静), PC这边读不到数据。提示“超时”。 我目前是把4—2,9—11短接的。根据网上朋友说,这样不必要,因为CP341内部已经短接,我也看了文档“串口通讯模块的信息与使用.pdf”的介绍,文章图片指明CP341内部已经短接。但是实际上不是这样。我实验了两种状态。4—2,9—11不做短接,测量11—4电压 3.9V,运行测试程序(modscan32)中测量电压大约还是这个数值,CP341的RXD灯不会闪。4—2,9—11做短接,测量11—4电压 4.55V,差别挺大。运行测试程序(modscan32)中测量电压4.33V,CP341的RXD灯这时随仿真测试程序指令信号闪一下。如果真是内部已经连接,相信不会出现这种差别。 从PLC运行监测看,模块没有任何错误提示(错误信息字节为0),6个位信号从上到下是0,0,0,0,0,0。(我也看到无错误提示情况下出现0,1,1,0,1,0的情况,照样读不到数据。) 实验我的RS485/232转换器和其他第三方设备做MODBUS (RS485)通讯。正常。 我分析信号CP341已经收到,为什么没有回应,发送?可能还是程序问题,但是不知道怎么检查。物理链路考虑到是否应当把第八根线(地线)引出,但是我的RS485/232转换器没有地线,只有两线或者四线,似乎没有办法实验。西门子的例程都不爱拿MODBUS (RS485)说事,各位只好多费心了。 (这个问题今天下午我在"找答案"也提了,但是得到一位朋友提示,说应该到这里来.我还是论坛菜鸟,对不住了,再此再发一遍.谢谢) |
|
冬日 奇侠 经验值:8680 发帖数:3358 精华帖:56 |
楼
主题:回复:CP341MODBUS__Slave(RS485)通讯失败请教列位朋友会诊
能否换个思路,先不管modbus协议,就直接用最简单的ASCII协议,你发送,341接收,只要能收到数据那就好办了,如果收不到。那么检查的范围会缩小一点。
If anything can go wrong, it will.
|
|
老石 游民 经验值:93 发帖数:47 精华帖:3 |
楼
主题:回复:CP341MODBUS__Slave(RS485)通讯失败请教列位朋友会诊
首先感谢各位朋友参与讨论.这个问题已获得初步解决.我把主要心得做个总结如下,供其他朋友参考.
第一,要注意学习西门子的两篇中文文档"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没有做好.我将另发帖子请教高人. 这些总结供朋友参考. |