大家好,作为西门子技术支持热线的一名工程师,今天与大家分享一个热线上的故事。
这是一个有关通信的问题。
问题描述:两个343-1之间无法通信,使用的连接方式为S7连接,调用的程序块是PUT, GET (FB14,FB15)。
交流如下:
客户:通信不上,怎么办?
我:首先这两个以太网模块能用计算机网卡通信上么?
客户:可以
我:先检查使用的程序块,调用的FB14,FC15是不是从库-->simatic net--> CP300中调用?
客户:没错,就是这个程序块。
我:您的链接状态在线监控一下,是否已经连接?
客户:怎么监控?
我:在netpro中点击activate deactivate connection status按钮,位置就在上载按钮右边。
客户:连接状态是established。
我:连接已经建立了,那就看程序的状态吧。
客户:程序?我CPU 报错了! CPU的SF红灯是亮的!
我:这种情况下需要看诊断缓冲区,您看看有什么错误。
客户:你等一下啊,我看看。有一个错误说没有DB块22。
我:那要检查您的程序了,看看什么地方调用了DB22,并且检查您有没有下载DB22.
客户:我也不知道哪里调用了DB22。
我:在CPU的诊断缓冲区页面中有个open block按钮,通过这个打开按钮,可以找到出错的程序位置。
客户:原来是这段程序啊,这段不用了,我注销掉。你等一下啊。一会就好。
我:现在还有SF错误么?
客户:还有。
我(汗):这种情况下还需要看诊断缓冲区,看看存在有什么错误。
客户:缺少FC10,我下载了FC10,没有SF灯亮了,但是还是没有通信上。
我:那需要看通信程序。
随后一步步的检查所有的参数,容易出错的地方有:REQ需要连一个脉冲变量,ID填写netpro中建立的连接ID号,地址ADDR_1和RD_1,SD_1参数指定的地址需要存在。
客户:还是没有通信上,都是0。
这个时候我突然想到,有些情况下,客户发送和接受的数据区的数据都是0,会不会是看到都是0就认为没有通信上呢,
估计就是这个原因,没有出错还貌似没有通上!
我:您方便在变量表中监控一下两方的数据,看看是否都是0?
客户:等我看看。。
过了一会,客户告诉我说数据区都是零,但是在发送方置了一个1后也没有收到。
我:程序上有出错的信息么?
客户:status管脚和error管脚都是0
我:那这样把,我发一个以太网通信模块常见问题集给你您再比对一下,这里有例子程序和说明。
我没有办法了。
第二天:打电话过去问客户说已经做通了,我问怎么做通的,原来参数错了,netpro有两个连接,实际使用的连接ID是2,填的是1。
但是这个不能解释为什么error和status是0啊,我又问客户您昨天的触发管脚是否按我们说的是脉冲?不是啊,一个常闭点。
OK:
事情是这样的:
1.连接ID不对,数据一次也过不来。
2.通信请求管脚没有使用脉冲触发(客户使用的是常闭点),导致通信程序一直没有执行。(因此没有出错信息)
总结:
以太网通信请参考如下文档,以太网通信模块常见问题集http://www2.ad.siemens.com.cn/download/html/4126.aspx
一般以太网通信查错的顺序是:
1. 以太网模块是否可以ping通,或者是否可以通过网线上下载或者监控程序。
2. 连接是否正确建立,即在netpro中监控连接的状态
3. 调用正确的程序,300以太网模块使用的通信程序需要在库-->simatic net--> CP300中调用。400以太网模块使用的通信程序需要在库-->simatic net--> CP400中调用。
4. 检查程序调用的是否正确,仔细检查每一个管脚,有LADDR参数的地方一定一定要填写模块组态的IO起始地址(在硬件组态中可以看到),REQ需要使用脉冲变量(频率不要太快),ID填写netpro中建立的连接ID号,地址ADDR_1和RD_1,SD_1参数指定的地址需要存在。
5. 可以通过status和error管脚来进行辅助检查。
CPU报SF红灯,一定要看诊断缓冲区,光下载一些OB是无法解决问题的,仅仅是避免CPU停机而已,利用step7的诊断缓冲区可以快速的定位问题。