您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 西门子S7-200 自由口通信实用文档
主题:应用探讨—S7-200自由口通信—发帖整理强大而灵活的自由口通信能力,是S7-200系统的一个重要特点。S7-200CPU的RS485通信口提供了建立在串行通信基础上的“自由”通信能力,数据传输协议完全由用户程序决定。通过自由口方式,S7-200可以与串行打印机、条码阅读器等通信。而S7-200的编程软件也提供了一些通信协议库,如USS协议库和MODBUSRTU从站协议库,它们实际上也使用了自由口通信功能。开设本话题的目的,在于澄清自由口通信的基本概念,强调使用中的要点,讨论应用的常见问题。经过此次集中交流,解决了如下一些问题:1.自由口通信基本概念2.自由口通信编程指令的使用和技巧3.自由口通信常见问题4.产品功能建议更多信息请参考下面文档。“下载中心”参考文档:文档编号“1109582”——S7-200《可编程控制器系统手册》文档编号“A0136”——《西门子S7-200•LOGO!•SITOP参考》以下为本次探讨的发帖整理,查看原始交流内容请点击此处。1.自由口通信基本概念(1楼——5楼)2.自由口通信编程指令的使用和技巧(6楼——15楼)3.自由口通信容易犯的错误(16楼——24楼)4.产品功能建议(25楼——27楼)quote:以下是引用BABU在2011-01-2015:17:08的发言:我回来了,项目终于做完了,可以回家过年了,:)。自由口通信真是折腾的我好惨啊,简单回顾一下,希望对像我这样的菜鸟有些借鉴作用。先感谢一下西门子论坛和热线,没少骚扰他们。在完全没有准备的情况下甲方又加进一个仪表,做什么自有口通信,晕阿!没办法,迎着上吧!网上搜资料,看手册,越看越糊涂!时间紧迫,还是直接上手做吧。首先是把PLC和仪表连接起来,可仪表的口是rs232的,热线工程师告诉我得做rs232/485的转换,打车到市场上买个转换器(打车钱比设备钱还多,可见现场多么偏僻阿),听卖转换器的老板给我分析了一下每种的区别——不光是价格的区别,说实在的,当时非常惭愧,老板懂的比我多多了。买回来后自己动手焊线,一个人费了九牛二虎之力,焊的那个惨样就不用说了,还好有壳可以包装一下。焊好了,实验一下效果吧,不知到怎么做了,打电话。热线工程师告诉我找个串口调试工具,连接到pc机上测试。在串口调试工具上发一串数,在200上收,ok!高兴坏了,没白忙活。硬件上应该没问题了,接下来开始做程序了。先得理解仪表的协议,弄清了仪表先要收到请求数据的命令,然后根据命令做出响应。同样,先用串口调试工具和仪表连接进行通信测试,还算聪明吧,:)!然后开始在200里编写收发程序,开始时整个思路都是乱的,无从下手。就把200手册上的例子程序整个抄上,在cpu224的两个接口间进行通信实验。经过不停的实验,终于一点一点地理解了控制字节、控制参数的含义,怎么设置接收结束条件,怎么使用中断、怎么控制接收和发送等等。ok,开始真正地与仪表通信了。发请求命令,收数据,可收到的数据是ASCII码,得进行数据转换。根据大侠们的提醒,经过实验知道了怎么将ASCII码转换为实际的工程数据。到此基本结束了,虽然说着好像也没什么,但只有我最了解其中的痛苦,不停地实验,不停地修改阿!后面在实际运行中又遇到了有时通信中端的问题,将双绞线的屏蔽接到地上后暂时还没出现问题。总结一下,个人认为作自由口通信需要做好以下几方面工作:1、最主要的是多动手,光看资料是没有用的,只有自己亲自去动手实验一下才能发现问题和帮助理解。2、做实验是找个串口调试工具(我用的是sscom32)是必须的,可以帮助你测试你的通信线,调试你的程序,尽量不要直接与设备进行通信,通信不上不好分析原因。3、我认为200手册上的例子程序非常好,基本的处理方法和编程方法都涉及到了,可以根据你的需要做修改,当然首先要充分地理解他。4、遇到不太容易理解的,或有问题的,多和别人交流一下,从中可以得到不同的思路。提前给西门子和坛子里的专家们拜年了!1.自由口通信基本概念(1楼——5楼)quote:以下是引用LaoHuai在2010-12-2408:29:48的发言:quote:以下是引用happyJulia在2010-12-2321:58:54的发言:以前很少用自由口通信,但项目里要用呀,正在学习,就接到邀请了。请教各位大侠:S7-200自由口能支持的最高速率是多少呀,我希望通信能快点。还有它的数据位、停止位是几位呀,我好确定能和什么样的设备通信呀。最高波特率是115200BPS,但需要1.2或者以上版本的CPU。数据位可以是7位或8位停止位是固定的1位。quote:以下是引用300小小生在2010-12-2313:52:59的发言:300也可以实现与上位机自由通讯的,S7-200自由口通讯是基于RS485通讯基础的半双工通讯,因此,发送和接收指令不能同时执行。这点有点不好,在300里可以422通讯,但最好是PLC发送不要连续发送,而接收倒没事。我有次在调试的时候发现上位机发了任务后,PLC设备要过好长一段时间才去执行,后来请教了老师傅,老师傅说把发送端加个间隔时间就好了以下是引用鼠老爹在2010-12-3115:59:24的发言:不管是什么通讯,传送的都是二进制代码。ASCII码与二进制协议的区别在于代码所表示内容的方式不同。如果使用ASCII代码,则数据不能直接用于数学运算,而必须转换成普通的二进制代码。这样会加重程序负担。但是ASCII代码用于通讯有一个好处,起始字符与结束字符比较容易确定和判别,它们一般不会出现在数据区。而用二进制代码通讯,数据无需转换即可直接使用(高低位字节可能需要交换),PLC的负担较小。但是起始字符和结束字符经常会与数据重复。因此,用二进制代码通讯,通常是靠字符数和定时器来确定接收终点,主从站之间的步调协调非常重要。以下是引用Am_Programer在2010-12-2715:48:59的发言:西门子S7-200系列PLC支持自由口通信协议。所谓自由口协议是指通过用户程序控制CPU主机的通信端口的操作模式来进行通信。用这种自由口模式可以用自定义的通信协议连接多种智能设备。自由口模式支持ASCII和二进制协议。在自由口模式下,主机处于RUN方式时,用户可以用相关的通信指令所编写的程序控制通信口的操作。当主机处于STOP方式时,自由口通信被终止,通信口自动切换到正常的PPI协议操作。自由口通信指令包括:XMT,自由口发送指令;RCV,自由口接受指令。用特殊标志寄存器SMB30(端口0)和SMB130(端口1)的各个位设置自由口模式,并配置自由口通信参数,如波特率、奇偶效验和数据位。发送指令(XMT)和发送中断:发送指令允许S7-200的通信口上发送最多255个字节,发送中断通知程序发送完成。接受字符中断:接受字符中断通知程序通信口上接受到了一个字符,应用程序就可以根据所用的协议对该字符进行相关的操作。接受指令(RCV):接受指令从通信口接收到整条信息,当接收完成后产生中断通知应用程序。需要在SM存储器中定义条件来控制接收指令开始和停止接受信息。接受指令可以根据特定的字符或时间间隔来启动和停止接受信息。接受指令可以实现多数通信协议。自由口通信功能的用途:1.通过RS-232或RS-485串口连接多种智能仪表或RTU,根据智能仪表或RTU定义的通信协议编写用户程序与智能仪表或RTU通信。2.使用USS协议与西门子MicroMaster系列变频器通信,STEP7-Micro/WIN提供USS协议库,S7-200CPU是主站,变频器是从站。3.创建用户程序来模拟另外一种网络上的从站器件。例如S7-200的用户程序模仿一个Modbus从站。STEP7-Micro/WIN提供Modbus协议库。4.采用自定义通信协议与PC通信。PC上的应用软件可以采用此方法方便的访问S7-200的数据。这是第三方软件访问S7-200PLC比较简便,廉价的方法。对于自由口通讯,西门子的很多资料都做了比较详细的介绍,其中还包含了大量的例子程序。由于通讯的不可见性,很多人还是不能很好的掌握,我建议大家:1、理解什么是通讯、什么是串口、什么是232、什么是485?没有过硬的硬件知识是不可能做出通讯的,你连线都不知道怎么接,怎么调试你的程序?2、仔细阅读西门子关于通讯的资料,不需要多只需要精,因为各种版本的资料基本是一样的,关键就是SMB30、SMB86、87、88、89、SMW90、92、SMB94自己控制通讯过程需要SMB2,把这些弄明白了,才有可能做出通讯程序3、使用PC的通讯软件协助调试,有了PC的通讯软件可以看见通讯过程中的数据,能够更方便的调试程序4、理解各种通讯协议。大家要注意串口通讯和协议是2码事,不论是PPI、MODBUS还是USS它们都有自己的协议规范,根据规范来写你就可以实现这种通讯。只不过PPI是不公开通讯协议的,没有办法写而已!最后建议大家自己做通讯,起码会做!至于用不用自己做就要根据你的实际情况了,西门子提供的库也是很方便的!以下是引用yanxiao在2010-12-2413:50:10的发言:我看过不少问S7200通讯问题的贴子,觉得很多问题并不是S7200的,而是串行通讯的共性问题,也就是对串行通讯本身概念的认识问题。下面我来谈谈在我的记忆中关于串行通讯的一些认识。1、串行通讯只有一个传输通道,每个时刻只能表达一种状态。不管什么介质,不管是什么信号,我们用1表示一种状态,用0表示另一种状态。2、只用1和0两种状态,是不能表达更多信息的。好在有一个物理量,对每个系统来讲是统一的,那就是时间。我们现在很容易做到不同系统之间的定时误差控制在PPM数量级。1和0在时间上进行有序的组合,就可表达近乎无限的信息。3、任何一个信号,如果不赋给它一些特点的意义,实际上没什么用。两个系统要通过信号交换信息,必须对信号有一个共同的约定,这就是我们通常所说的协议。4、最基本的协议是物理层面的(那个OSI的七层协议模型,第一层就是物理层协议)。RS232、RS485、RS422,这些是物理层面的一些协议。5、我们现在要谈的是异步串行通讯。异步,发达方和接收方之间,没有额外的通道来传送信息何时传送与接收。每个信息单元的起止时间,发送方编在信息中,由接收方自已解码并同步。6、好。现在来讲一下传送一个字节的过程。在没有传送信息时,传输线处于空闲状态。规定:空闲状态为1。发送方(TX)准备发送,驱动传输线让它由1变为0,并持一位的时间长度,我们把这一位叫做起始位。接收方(RX),检测到传输线由1变0,意味着可能有信息要传了,RX就持续检测,以验证这个0是不是持续了规定的一位时间长度,若是个合法的起始位,就按约定的定时方式,把后续的传输线状态,接收为1个字节。TX在发完起始位后,就发字节中的第一个位(bit),并依次把字节中的所有位发完,每bit均持续相同的一位时长。然后再发校验位(如果约定发/收方都采用的话)、停止位。7、停止位,这个要说一下。我们知道起始位是0,而这个停止位,规定是1,和传输线的空闲状态1是相同的。停止位规定的时长比较乱,有1位停止位(也就持续时间占1个位长)、1.5位、和2位停止位,其它时长的停止位好象没见过。停止位的作用,其一是作为一字节单元的成员,给接收方定时用的,也就是下一个字节,在停止位之后才开始。另一个作用,可供检查字节传送的完整性。因为停止位是规定为1状态的,若在停止位的时间里测到了非1状态,表示这个字节传送有问题,有可能被接收方丢弃,传送失败。8、若收发双方的停止位不相同,怎么办?这个在论坛上经常有人问。好,我们来分析一下。若TX是2个停止位,RX要求是1个停止位,很好,TX多发的一个停止位,会被RX看作是空闲状态(也可认为是字符间隔),没有任何问题。若反过来,TX是1个停止位,RX要求是2个停止位,有问题吗?一般问题是很大的,但也有可能可以正常通讯。这要看TX是怎么发字节的。有些系统,硬件上,发送电路比较简单,没有缓冲机构,一个字节必须完整发送后,才准备下一个字节的数据,而这个准备需要花一些时间的,
本文标题:西门子S7-200 自由口通信实用文档
链接地址:https://www.777doc.com/doc-4845214 .html