回复:应用探讨——通信问题,你要深思熟虑!

空果仁

官方工程师 西门子1847工业学习平台

  • 帖子

    200
  • 精华

    47
  • 被关注

    354

论坛等级:侠圣

注册时间:2011-07-11

普通 普通 如何晋级?

发布于 2014-11-11 22:26:52

138楼

展开查看
以下是引用啤酒鱼在2014-11-05 17:40:06的发言 >116楼:说来话长,如果深入浅出的话,在以太网主站通信上先划分S/R 和S7通信。
先来说说S/R,即Send / Receive方式,也叫S5兼容通信。要说明白必须知道它的由来。
S5 PLC 在以太网上最初只有ISO通信,即使用MAC地址,地址分布都是由080006以后开始,这是给西门子预留的,全球统一,现在地址用完了,所以MAC地址也变了。其实无所谓,因为mac地址可以改变,只要在一个网络内不一样就可以了。
通信方式就是S/R了,对等发送与接收,有一个好处,接收区大于发送区就可以了。我发送时你必须要有接收块,否则会报无接收资源故障信息。使有起来非常方便,两个站点先建立一个连接,然后可以在一个连接上同时调用发送与接收块。在这基础上又产生了WRITE和Fetch,即单边编程的方式,直接将对方的数据抓到本地的数据区,也可以将本地的数据直接写到对方的地址区。所以看程序想了解通信时,可以先看连接表,否则无法从程序中读出(太累了),因为大部分通信程序一样。
使用MAC地址不能路由,所以后来出现的支持TCP的通信处理器,例如CP1430 TCP,与ISO通信方式一样,唯一的不同是使有IP地址,支持路由了。另外使用标准的TCP/IP可以与其他设备通信,不需要驱动,数据透明,ISO 也说通信透明,但是要参考ISOXXXX规约,得自己动手写驱动。
会了PLC通信的组态后,连接上位机也就变得方便了,例如WINCC与S5以太网layer4的通信就是使用了WRITE和Fetch,参数都一样,S5 PLC 不需要编写通信程序(除了send all和receive all)指定地址区。
有一点没有确定,就是S5 这块通信板是否支持ISO_on _tcp,需要查一下。为什么出ISO_on _tcp连接呢,我想可能大家都熟悉ISO通信了,这其实是在TCP上使用了原来ISO的机制,从状态上看,TCP/IP使用端口号,ISO_on _tcp使用TASP号,自己可以定义几个字符作为标识,其实背后也对应着一个固定的端口号(猜的,像S7通信使用102),使用TCP/IP好好的,基于什么样的需求要使用ISO_on _tcp,熟悉,不是,因为TCP/IP是数据流方式通信,发送10个字节是,接收去可以是8个字节,那么怎样接收呢,很关键,下班吃饭,下次再接着说吧。
以下是引用jacky_andy在2014-11-04 13:21:25的发言 >99楼:西门子的通信方式太...

引用99楼详细内容:

西门子的通信方式太多,拿以太网来说
tcp udp 还有iso on tcp等等协议,在用这些协议的时候,我不是太会选择到底用哪一种。
如果两者都是西门子的系统的话,我是肯定选择s7协议。
和第三方通信,到底应该怎么选择,一直困扰着我。

如果使用TCP连接,发送10个字节而接收只有8个字节,那么发送的前8个字节到的接收区后,满了,还有两个字节又重新放到接收区的前两个字节中,这样你接收的数据前两个字节就被覆盖了,同样接收区可以是任意,如果发送的数据是一样的,接受区接收到的数据就是循环变化的,不容易判断。有人又会问道,为什么接收与发送区不设置为一样呢,例如都是20个字节,但是在应用中会发现会有问题,例如MODBUS/TCP,客户端可以发送读/写请求,读3区数据20个字节的请求,然后从接收区读出,如果下一次从4区读出4个字节数据是,你的接收区就会变化,假设分别从不同的数据区读出5,6,7个字节,那么我的接收区应设置多大呢,如果设置为5,那么接收到6个字节时,数据的次序就会发生变化,使编程人员不易判断。也有工程师想过,设置一个大的接收区,接收到新的数据就清零,实验后发现,第一次接收到4个字节后清零,第二次接收到的数据还是从接收区的第5个字节开始接收,与清零无关。为了解决这样的问题(如果读取固定长度的数据那就幸福了)第一可以购买西门子通信函数块,另外一种就是设置接收区为一个字节长度,通过编程移动数据(与DONE结合).使用TCP连接的另外一种风险就是数据的更新问题,假设上位机读写PLC数据,大家都知道上位机快呀,这样相当于发送快于接收,如果上位机发的快而PLC接收的慢,这样数据就会堆积到网卡的缓冲区中,PLC接收一次数据,网卡的缓冲区就会腾出一点空间,有空间后才可以再次发送,这样就会出现上位机发的数据几分钟后才传到PLC中,这样的事件在PLC中出现的少,有几次,在SIMOTION就比较多了,因为上位机发送实时的指令与算法,这时需要考虑到PLC中的接收频率。为什么要使用TCP连接的,1:例如与上位机通信不需要驱动;2:使用MODBUS TCP;3:使用其他操作系统但是这场TCP协议的;4:需要路由,现场中很少使用,例如通过互连网两个PLC通信,通常都是编程器通过互联网远程维护。如果要我定义一个两个PLC间通信的方式(我的观点),使用TCP连接时我需要发送与接收数据定长,并且接收频率大于发送频率,我就不考虑了,ISO(没有了,或很少网卡支持)和ISO_On_TCP都比较好,因为1:发送快了就会报错(现在好像再优化,原来一定会的,所以建议在OB35中发送,在OB1中接收)2:数据有长度信息,接收区大于发送区就可以了,接收的数据总是从头开始。但是与上位机通信就有问题,1:不支持unix系统(不好编写驱动,前面已提出)2:在windows系统中需要购买SIMATIC NET。这些通信统称S5兼容通信或用户开放式通信,这些通信的确认都是网卡实现的,早期是CP卡,现在CPU集成的PN接口也支持,如果需要用户数据层的确认,例如我发送的数据对方是否接收到,除了用户编写程序识别并确认外,另外一种通信方式就需要S7通信了。
来自西门工业子技术支持 高级专家
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

通信与网络组件

共有4512条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。