西门子S7200 自由口通信实用文档Word文档格式.docx
《西门子S7200 自由口通信实用文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《西门子S7200 自由口通信实用文档Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
文档编号“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、遇到不太容易理解的,或有问题的,多和别人交流一下,从中可以得到不同的思路。
提前给西门子和坛子里的专家们拜年了!
以下是引用LaoHuai在2010-12-2408:
29:
48的发言:
以下是引用happyJulia在2010-12-2321:
58:
54的发言:
以前很少用自由口通信,但项目里要用呀,正在学习,就接到邀请了。
请教各位大侠:
S7-200自由口能支持的最高速率是多少呀,我希望通信能快点。
还有它的数据位、停止位是几位呀,我好确定能和什么样的设备通信呀。
最高波特率是115200BPS,但需要1.2或者以上版本的CPU。
数据位可以是7位或8位
停止位是固定的1位。
以下是引用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:
西门子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状态,表示这个字节传送有问题,有可能被接收方丢弃,传送失