技术论坛

缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复

作者 主题
至圣

经验值: 72011
发帖数: 8043
精华帖: 145
主题:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复
推荐帖


只看楼主 楼主 2018-04-10 08:00:30

缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复

    在上周看到有这么一个找错误的贴子,大致的含义是西门子S7-200 Smart帮助文档之通讯---串口通讯---自由口通讯的案例有不足之处,请大家查找一番错误之源。我看到这个贴子,判断可能的原因是定义中断出错(仅仅按图片说明)。说实在,我自己真的还没有仔细去看过这些帮助文档中的案例程序段,仅仅只粗略的浏览了一下大致的内容,平时看到西门子文档最新推出,一般都是大致看一下内容,了解一个概况,到需要使用类似的文档时再细细阅读或者参考,那怕需要借鉴的某一些程序段都需要自己编写、验证再调用的习惯。

   问题的链接:

http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=188114&cid=1076

   记得当时的回复是可能定义的中断号不正确,因为看到楼主说无法接收这茬说法。

   在星期天晚上,又看到这样的回复贴子,链接:

http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=188291&cid=1076

   我的回复是这个问题我开始感兴趣了,等有时间再重新看看这个帮助文档,到底是否如同描述那样出了“状况”?按我以往对西门子工作者那种严谨的工作态度的认识,这个可能性非常之小。下午借了一个200 smart plc准备在晚上测试一番,看看问题的所在。西门子200或者200samrt这个帮助文件我每次看到关于200的问题的求助时,基本都推荐大家去下载看看,里面的内容非常广泛;也非常之实用是平时编程工作的参考,也是初级入门的好教材。

   西门子200 smart 帮助文档最新的版本是V2.0的,今天下午还特意下载了一个,以作为问题的参考作证。

   打开200smart的帮助文档,看通讯---参考通讯---自由口通讯下的常问问题集5有如下说明:“S7-200 SMART CPU 为通信主站,对通信从站发送查询报文后需要调用 RCV 指令接收从站的应答报文,如果从站故障或者通信电缆损坏时,S7-200 SMART CPU 的通信端口将始终处于接收状态。S7-200 SMART CPU 在指定时间段内对从站未发出任何应答的超时该如何处理?”

方法一:使用任意字符检测为接收消息的起始条件时,选择消息定时器和其它结束条件组合为接收消息的结束条件。

   首先,该程序的接收通讯数据的起始条件为任意字符,即只要有信息进来,则判断为信息的开始,其次,是采用消息定时器和其它结束条件作为接收信息的结束条件。

重新温固一下对200smart 自由口通讯各控制字节、字的认识开始:针对于通讯口prot0口

通讯控制字节,定义SMB87各位有具体的含义

通讯信息的起始,定义在控制字节SMB88

通讯信息的结束,定义在控制字节SMB89

空闲信息定时器,定义在控制字SMW90

信息定时器,定义在控制字SMW92

接收信息数量,定义在控制字节SMB94(这个字节是必须填写的内容)

验证例程一:

1)  定义通讯参数SMB30 = 2# 00001001

2)  定义通讯的控制字节SMB87 = 2# 10111100

3)  定义信息结束字符16#0A

4)  定义空闲先定时器SMW90 = 0;信息定时器SMW92 = 100(mS);通讯数据量SMB94 = 10(字符)

5)  定义发送完成中断,中断事件号9并连接到发送完成中断子程序

6)  编辑一个“TEST”检测字符串,并将此信息按特殊标志位SM0.5的脉冲发送出去

程序条例清楚,没有什么值得可疑的问题,这些基本都是编辑自由口通讯的基本步骤。

再看控制字节SMB87的具体定义:

SMB87   = 2#  1       0       1       1       1       1       0       0

                       使能            信息     空闲    信息    启用

                       接收            结束      线    定时器   定时器

   这个例程的含义是当发送“TEST”信息完成后,进入发送完成中断等待接收。如果接收到16#0A或者信息定时器时间到达后,作为信息接收的结束标记。

我用串口调试软件进行测试验证:

程序文档中有,这里不列举,看测试结果,图示:



程序能够以每秒时间间隔发送TEST数据到串口调试软件中正常显示。

   由于,文档中没有编辑接收程序的具体字符数据,我继续在发送完成中断中编辑接收指令,假设文档内容将接收指令数据存放定义在VB200开始的10个字节中,通讯数据暂定义为“SMART”。

大家都知道串口通讯为半双工机制,即一条通讯线路上只允许只有唯一的一条命令有效!

我将程序稍加修改,将发送条件的秒脉冲SM0.5修改为以人为的触发发送模式,地址为M0.0,以配合串口调试软件的特性。



   当激活M0.0发送使能位,使程序能够进入到发送完成中断,启用接收指令RCV时,接收的数据区中有“SMART”字符出现。再测试几次触发M0.0 = 0;1变化,所接收到的数据仅仅只是在指定的10个数据区中移动,这个主要原因是触发M0.0的时间周期机制及定义的信息接收条件引起的。

写到此,我真的开始放下了那个颗被所谓错误的决断的心态释然了。到底是哪里出的问题说该程序有错误?如果说有“错误”也不全面,也只是一个片面的理解,上诉说明仅仅是我对提问者的理解,所谓解铃还需系铃人,话说错误也应该有他的理由,无论是正确的还是错误的。从整个程序的含义上分析所谓的“错误”,我也只能说这个程序针对你的测试不够完善或者说编程测试者对通讯指令尚不够熟悉的原因吧。

   说起西门子工作者对待问题的严谨态度,我在文档的下面又一次找到了答案,缓引“例子程序请参见:超时处理1.smart例子程序中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试,例子程序仅供参考”。也就是说例子程序有可能在测试时,需要根据自己测试的内容(测试的软件及通讯数据量)稍加修改、调整的。

   再次打开楼主回复的内容,看楼主在回答的下面提示中看到无法接收的话题,哦,原来他指的应该是这些了(无法接收数据)。首先这个例子程序应该能够接收的,接收的条件也能够满足接收的需求(严格按接收控制字节测试),如果在完全按此例子程序无法接收的,也只是对串口调试软件通讯的认识问题了,即通讯线路上只能允许唯一的一条指令有效,而我测试的是该串口调试软件,即串口发送数据的按时间循环的,所以,可能会与plc的发送指令冲突了,修改发送指令触发条件后能够正确接收数据。但是,如果用其它软件方式测试通讯,那应该需要具体问题具体分析、对待了,这里的“片面”是指我测试的串口调试软件特性所致。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1472680&b_id=64&b_sid=0&s_id=0&num=0

至圣

经验值: 69053
发帖数: 12266
精华帖: 59
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 1楼 2018-04-10 09:37:32

赞~看的我晕头转向的....对通讯搞的太少了

不过按说西门子文档应该也是经过测试的才对


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
至圣

经验值: 72011
发帖数: 8043
精华帖: 145
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 楼主 2楼 2018-04-10 10:58:14
以下是引用RENHQ在2018-04-10 09:37:32的发言 >1楼

赞~看的我晕头转向的....对通讯搞的太少了

不过按说西门子文档应该也是经过测试的才对

是的。

不要说是官方的文档了,就是我自己发的贴子我都是通过自己验证的,但是,有时候可能自己按这个文档实验时,由于硬件和测试环境的不同,或者对问题理解的片面性造成测试的失败。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3434
发帖数: 211
精华帖: 4
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 3楼 2018-04-11 09:51:05

为什么的调试助手发送 SMART ,PLC却收不到信息呢


哈哈哈哈,人生不如意事,十有七八,能与人诉之一二。
以下网友喜欢您的帖子:

  
至圣

经验值: 72011
发帖数: 8043
精华帖: 145
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 楼主 4楼 2018-04-11 11:18:03
以下是引用小猪宝宝♂在2018-04-11 09:51:05的发言 >3楼

为什么的调试助手发送 SMART ,PLC却收不到信息呢

近来经常看到类似的提问,我每次回复但总是石沉大海似的。

PLC接收通讯数据,需要先看接收的条件,如起始符,信息定时器,和结束符、字符长度的定义什么的。

另外,你的串口软件是什么类型的,是如何发送数据的?

串口通讯一个重要的通讯条件是通讯线路上只能是唯一的一个指令激活有效!


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72011
发帖数: 8043
精华帖: 145
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 楼主 5楼 2018-04-11 11:21:11

你按帮助手册的程序编写一个测试程序,然后根据我的说明,测试一下试试。

注意,帮助手册中发送指令是用SM0.5的,这个需要修改为M0.0或者其它地址。

串口调试软件发送模式设置为自动;10mS连续发送模式。



 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2777
发帖数: 137
精华帖: 0
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 6楼 2018-04-27 11:19:18

经常看见楼主的精彩回答,楼主的认真严谨是有目共睹的。感谢楼主给我们学习路上的许多帮助。

关于通信,我希望我们的应用工程师,特别是新手,首先要一定的通信基础知识。不要一上来就是通信指令应用。要理解PLC的通信伙伴的通信协议内容。用指令要知其然,知其所以然。例如我们用modbus库指令,要了解为什么要有站地址slave、存储地址DataPTR,数量Count,为什么要有Mode,Baud,Parity等,前一问你要了解通信规约(通信协议,数据帧),后一部分你要知道这是利用的PLC的自由口通信,这是异步串口通信。这些百度都容易获得知识。

同时,我们要了解设备的一些特殊约定。例如,许多变频器等驱动设备,必须先接受停机命令,再才能正常启动运行。我们非常了解协议,我们用串口助手,发送正确的PZD数据(命令和设定值)启动电机就是不启动,怎么回事?其实你只需要在此之前,发送一次停机命令。再把上诉数据包发送一次,电机就启动了。


勤思力行,永不止步
以下网友喜欢您的帖子:

  
侠圣

经验值: 2697
发帖数: 244
精华帖: 0
回复:缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复


只看楼主 7楼 2018-05-20 07:52:09

多谢w工!


学无止境
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。