guanying14
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看guanying14的 主题 / 回贴
楼主  发表于: 2010-10-21 10:02
有没哪位高手用过S7224XPCN的自由端口与用VB编写的软件通讯咯?,以前我们编写的VB软件和三菱的FX2N系列通讯的话,只需将端口的通讯参数写入D8120和设置站号,而软件只需设定一样的端口参数即可通讯。不知道西门子的通讯口这样做行不行,看过实例,都是需要经过初始化端口,编写接受、发送子程序、还用了不少的中断。。挺复杂的。。而且当端口设置为自由端口通讯后。。。上位机与PLC之间的通讯线是否是用普通的RS485通讯线呢还是用PPI的专用通讯电缆呢?,有没哪位高手指点下。。。急啊。。。
德古拉伯爵
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看德古拉伯爵的 主题 / 回贴
1楼  发表于: 2010-10-22 15:25
用485 一般的计算机没有485 你用一个485转232的码转就行了
guanying14
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看guanying14的 主题 / 回贴
2楼  发表于: 2010-10-25 14:57
自由端口如果要用专用电缆是需要用哪种可以转换成485通讯的专用电缆。。如果将端口设置成自由口通讯后。。只需用普通的485通讯线就可以。。自己做都可以。。我试过了,但是暂时还搞不清楚它的数据段的起始地址是如何设置的。至于要转成485通讯才搞。。哪就是不用说的了。。
wjmdtt
级别: 略有小成
精华主题: 0
发帖数量: 124 个
工控威望: 261 点
下载积分: 1301 分
在线时间: 86(小时)
注册时间: 2009-07-20
最后登录: 2024-12-23
查看wjmdtt的 主题 / 回贴
3楼  发表于: 2010-10-28 16:02
pc与PLC必须用原装电缆,自由口通信我给你个资料你看下就明白了.
guanying14
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看guanying14的 主题 / 回贴
4楼  发表于: 2010-11-01 08:59
一般用原装电缆的是用PPI协议,不过这个协议是不公开的。。搞不到。。如果是自由口通讯协议的话,是不需要原装电缆的。。普通的485通讯线既可以。。不过要清楚西门子200的端口线定义。。其485的通讯脚是3和8.我试过是可以通讯的。。只不过我们现在是上位机软件和下面的PLC是分开两个人做的。。比较麻烦,切自由口通讯中用到挺多的中断的,而我读取其他的信号也需要用这些中断,所以比较麻烦。。不大想用自由口通讯了。。有点想用OPC通讯。。有那位高手以前用OPC来做过VB和S7200之间的通讯不,有的话能不能发个实例来看看。。西门子叫我下载了一个PC ACCESS,说是OPC的测试客户端和服务器的集成软件,遵循OPC的标准协议。。又不说怎么做这个通讯接口。。所以有点迷糊。。救命啊。。。
jxh668
jxh668
级别: 工控侠客
精华主题: 0
发帖数量: 1429 个
工控威望: 2169 点
下载积分: 4006 分
在线时间: 830(小时)
注册时间: 2009-12-21
最后登录: 2025-01-20
查看jxh668的 主题 / 回贴
5楼  发表于: 2010-11-01 09:11
OPC解决了什么?
  OPC诞生以前,硬件的驱动器和与其连接的应用程序之间的接口并没有统一的标准。例如,在FA(FactoryAutomation)——工厂自动化领域,连接PLC(Programmable Logic Controller)等控制设备和SCADA/HMI软件,需要不同的FA网络系统构成。根据某调查结果,在控制系统软件开发的所需费用中,各种各样机器的应用程序设计占费用的7成,而开发机器设备间的连接接口则占了3成。此外,在PA(Process Automation)——过程自动化领域,当希望把分布式控制系统(DCS——Distributed Control System)中所有的过程数据传送到生产管理系统时,必须按照各个供应厂商的各个机种开发特定的接口,例如,利用C语言DLL(动态链路数据库)连接的DDE(动态数据交换)服务器或者利用FTP(文件传送协定)的文本等设计应用程序。如由4种控制设备和与其连接的监视、趋势图以及表报3种应用程序所构成的系统时,必须花费大量时间去开发分别对应设备A,B,C,D的监视,趋势图以及表报应用程序的接口软件共计要用12种驱动器。同时由于系统中共存各种各样的驱动器,也使维护运转环境的稳定性和信赖性更加困难。
  而OPC是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。作为结果,从而可以向用户提供不依靠于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。
  利用OPC的系统,是由按照应用程序(客户程序)的要求提供数据采集服务的OPC服务器,使用OPC服务器所必需的OPC接口,以及接受服务的OPC应用程序所构成。OPC服务器是按照各个供应厂商的硬件所开发的,使之可以吸收各个供应厂商硬件和系统的差异,从而实现不依存于硬件的系统构成。同时利用一种叫做Variant的数据类型,可以不依存于硬件中固有数据类型,按照应用程序的要求提供数据格式。
  利用OPC使接口标准化可以不依存于各设备的内部结构及它的供应厂商来选用监视,趋势图以及表报应用程序。
来看看 ,有用的就下了。深圳的可找我呵
jxh668
jxh668
级别: 工控侠客
精华主题: 0
发帖数量: 1429 个
工控威望: 2169 点
下载积分: 4006 分
在线时间: 830(小时)
注册时间: 2009-12-21
最后登录: 2025-01-20
查看jxh668的 主题 / 回贴
6楼  发表于: 2010-11-01 09:20
也可参考:

在实际应用过程中,某些时候可能会采用VB/DELPHI/VC等高级语言,自主编程与西门子PLC进行通讯,这类帖子、论文在网上都可以找到,在此总结一下。

1、Prodave通讯

Prodave是西门子提供的一个软件包,为高级语言编程和plc通讯提供接口

通讯接口:MPI因 为MPI口是每块cpu的编程口,所以plc不需要另外添加通讯模 块,这个方案就比较经济,而且prodave软件包里面附带了example和详细的说明,用起来应该比较简单和方便(本人只匆匆看过文档,没有实验 过)。这方面的资料在百度上很多。当然,mpi的速度是有限的,如果采用普通的pc adapter连接pc和plc,最高速度也就38.4kbps,我不知道prodave能否支持mpi卡(5611之类的话),如果可以的话速度可以达 到187.5kbps。

2、串行通讯

看到过一些论文,采用串行通讯的方法实现pc和plc通讯。这种情况存在几点要求:

a、需要为plc添加一块串行通讯模块,比如300的话就需要cp340或者cp341(前者便宜些);

b、plc里面需要对串行通讯进行编程,其实也就是接收报文和发送报文,调用fb2/fb3(cp340的话)。

c、串行通讯的速度是有目共睹的,而且cp340或者cp341的数据吞吐量也是有限的,即报文长度是有限制的,因此个人认为通讯数据量大的话采用串行通讯就不合适了。

d、报文格式的话就比较自由,但是也应当合理,我虽然没有具体实验过,但是个人认为可以参考modbus的报文结构来编程,甚至就采用modbus的规范,不过这样的话要求编程者对pc和plc侧的modbus编程都要熟悉。

3、OPC

Opc是这些年来很流行的东西,其实我很讨厌opc的安全认证的设定。不过采用opc编程来访问plc真的是一件非常轻松惬意的事情。你需要做的就是了解opc的结构和编程,尤其是采用vb来编写opc简直是件傻瓜化的工作当然也牺牲了很多。

前面我实验了用vb通过opc(以太网)来访问300,包括用西门子的simaticnet提供的opc接口和第三方的kepserver

采用opc接口编程的优点:通讯速度快,编程简单。

4、以太网编程

采用以太网编程访问plc,其实又可以分为两种:

一种是socket接口,需要在plc里面编程进行收/发,大概是fc5/fc6吧,印象不深了,当然plc里面要定义一个connection, 填好地址、端口号之类的信息,这个对于熟悉西门子工业通讯的人是很easy的事情。Pc侧采用socket接口编程,最简单的就是vb里面的wisock 控件,当然这掩盖了很多细节。Socket编程本来就是一门艺术,讲究说学逗唱:)

这个方法的优点应该是pc侧编程稍微简单点(相对于后一种),而且可以不局限于windows平台,因为socket接口被诸如unix支持的更好。

第二种是采用西门子的 sapi接口函数,这样plc里面不需要过多的编程了,当然pc侧的编程难度就比较高了,ms只能用c来写,所以我望而却步鸟。看过相关帖子和论文,有高 人在项目里面就这么干的,而且数据量很大,看来高人很多很多啊,向他们致敬!关于sapi的资料其实都在simaticnet软件光盘里面,有兴趣的可以 去找来看看。

为了允许PC机和工作站上的应用程序与西门子S7系列产品进行S7通讯西门子公司提供了一个SAPI-S7应用程序接口通过它可以灵活而方便地跟西 门子S7系列产品进行通信。安装SIMATIC Ner软件后会在系统system32目录下生成一个S732.dll文件该动态链接库提供了大量基于WindowsNT、Window95/98、 Windows3.11和MS-DOS的函数这样就使得用户解决PLC和PC机的数据交换和数据处理问题变为可能。通信编程包括两个部分:(1)CP连接 组态(2)PLC与上位机通信编程。 4.1 CP连接组态 可采用STEP7软件或STEP7软件中用于工业以太网的NCMS7软件对CP进行网络组态。通讯处理器CP可连接PCPC/PG上一般装网卡 CP1613。在Windows控制面板下的“set PC/PG”下安装所用网卡驱动程序并设协议、站号、波特率、是否为主站完成对VFDs(Virtual Field Device)和S7 connections的配置[4]。 4.2 PLC和上位机的通讯编程 S7-300/400PLC有以下各类资源:①输入点I:接收外部开关量信号 ②输出点Q:输出给外部的开关量信号 ③内部辅助点M:存放所需中间结果 ④时间继电器T ⑤计数器 ⑥数据块DB:存放程序数据的存储区域 ⑦外设输入PI:主要接收模拟量输入信号经A/D转换⑧外设输出PQ:给出模拟两输出值[5]。要读/写这些资源首先要建立PLC和PC机的连接。 4.2.1 初始化与PLC的连接 SAPI-S7应用程序接口提供的管理服务模块(Administrative Services)提供了一些可供读出配置信息和登录/退出通讯系统的函数下面作一些简要介绍[6]:
S7_get_device() :通过此函数用户程序可以查询所有已安装的CP的CP名。
S7_get_vfd() :通过此函数用户程序可以查询任一指定CP的所有已配置的VFD。

S7_init():通过此函数用户程序可登录通讯系统。


S7_get_cref() :此函数提供了一个指向所选S7 connection名的指针。


S7_get_conn():此函数返回已登录VFD的所有S7connection名和指向他们的指针。


S7_shut():通过此函数用户程序可退出通讯系 统。 一个应用程序可以登录一个或多个CP的若干个VFD只有当应用程序登录CP及其所选的VFD在配置期间指定给该VFD的所有连接才是有效的。 4.2.2读/写PLC内部资源 初始化与PLC的连接成功后就可以对PLC进行读写操作。对PLC存储区即数据块DB的读写是实现监控的最基本操作。SAPI-S7应用程序接口提供的变 量服务模块(Variable Services)提供了一些读写函数由于篇幅有限现选一些经常用到的函数作一些简单介绍。


S7_cycl_read():此函数通知服务方准备对单存储单元循环读一个变量。


S7_get_cycl_read_ind():此函数接收来自服务方发送的数据。


S7_multiple_read_req():此函数通知服务方准备对多存储单元读一个或多个变量。


S7_get_multiple_read_cnf():此函数接收来自服务方的一个或多个变量的值。


S7_multiple_write_req():此函数通知服务方准备对多存储单元写一个或多个变量。


S7_get_multiple_write_cnf():此函数接收来来自服务方的执行上述写请求的结果。 需要特别注意的是:S7- 300/400PLC遵循“高地址、低字节”的规律这与某些习惯用法不同。例如在C++Builder6中变量类型为word的变量它的数据存放顺序是“ 低地址低字节”的规律。因此在对所读取的数据进行操作或给PLC数据块中写数据字时要进行相应的处理。 为解决上位机不能因前台的信息处理而中断后台的监听等问题可采用多线程编程技术将对PLC内部资源的读/写功能模块交给一个后台线程来完成。多线程编程技 术能提高CPU利用率加快信息处理提高系统的实时性在由多台计算机组成的分布式实时控制系统中应用多线程技术是完全必要的。 4.2.3 后台读/写线程模块部分代码 ····· do { ret = S7_receive(cp_descr&cref&orderid); switch(ret) { case S7_NO_MSG: break; case S7_INITIATE_CNF: Synchronize(my_get_initiate_cnf); Synchronize(my_multiple_read_req); break; case S7_MULTIPLE_READ_CNF: Synchronize(my_get_multiple_read_cnf); Synchronize(my_multiple_read_req); break; · · case S7_ABORT_IND: Synchronize(my_get_abort_ind); break; case S7_VFD_STATE_CNF: Synchronize(my_get_vfd_state_cnf); Synchronize(my_abort); break; case S7_VFD_USTATE_IND: Synchronize(my_get_vfd_ustate_ind); break; default : ····· } }while(ret != last_event_expected) 5 总结 运用C++Builder6.0编写的PLC控制调试程序具有用户界面友好人机交互方便数据库功能强大灵活的特点具有较强的通用性和实用性。通过调用S7 通讯提供的SAPI-S7应用程序接口实现PC机与S7300/400PLC基于工业以太网的数据通讯不仅数据传输率快而且数据传输正确率高。在对PLC 控制系统的调试过程中大大缩短了调试周期提高了工作效率。此通讯技术的实现对西门子工控产品的应用以及工业以太网的推广应用有着广泛普遍的重要意义。


我们知道要访问西门子的300/400 系列PLC中的I/O点,M和DB区内的数据有若干种方法可供选择。最常用的是使用组态软件WINCC来读取。另外,西门子还提供了SAPI-S7接口和 Send/Receive接口。SAPI-S7位于网络七层协议的5-7层,是专门为S7连接优化的,可以方便访问PLC内任意存储区。就我使用过的其他 组态软件如intouch(I/O server )和iFix的连接驱动,都是在SAPI-S7接口上开发的(从组态驱动时的配置过程可以看出)。Send/Receive属于较低的层次,一方面可以使 用西门子的接口函数编写,另一方面还可以直接用Socket接口编程。这时,在PLC方面要用专用的功能块编写发送接收程序来配合。常适用于报文的传送 (报文结构通常存储于DB块)。关于Socket编程我曾专门发帖讨论过其中若干细节。


还有一种就是新兴的OPC接口,但个人认为这种接口不适于较快数据的传输,即采样时间间隔不能太短。
来看看 ,有用的就下了。深圳的可找我呵