有一些二级的应用,需要脱离组态软件,直接访问S7 PLC,采用什么办法呢?
S7的通讯协议中兼容S5协议就支持ISO、ISO-on-TCP、TCP等多种协议,我们采用TCP协议。为了让PLC和PC机之间能相互通讯,就需要在PLC的网络组态中加入TCP连接。在建立连接的时候通常要注意几个方面:一是选择通讯伙伴;二是通讯伙伴的地址、端口;三是将连接设置为被动的。
按照西门子技术支持文档18843927的介绍完成上述步骤,就可以用Socket编程来访问PLC数据了,为了配合PC的程序,PLC中要利用Send/Recv功能块编写发送和接收数据的程序。
下面叙述一下我遇到的问题。
一、按照西门子文档的说明,选择连接伙伴时选“未指定”,并在地址选项中保留伙伴的IP地址和端口为空(不填任何内容)。针对这种连接,用Delphi的Socketclient组件编写的程序可以顺利读写PLC的数据。
二、当我组态一个PG/PC,并指定连接伙伴为此PG/PC时,地址选项中IP会自动填写PG/PC的IP,自己指定一个端口。这时再用SocketClient组件就会出错。错误发生在连接建立的时候,提示的信息是“非同步错误 10053”,查socket错误代码,10053是软件造成的错误,大概是说连接超时或协议错误。
然而用在Delphi 6后indy组件的IdTCPClient组件就能成功(这个程序是别人写的)。
哪位达人对这两种连接的配置的差别有些心德,请不吝赐教,谢谢!