您现在所在的是:

西门子SIEMENS

回帖:9个,阅读:4922 [上一页] [1] [下一页]
5436
dzfa 版主
文章数:2048
年度积分:50
历史总积分:5436
注册时间:2003/1/7
发站内信
发表于:2004/3/9 14:06:00
#0楼

--------------------------------------------------------------------------------

西门子S7-300系列PLC与PC机通信实现的研究
--------------------------------------------------------------------------------

发布时间: 2003-12-26 15:00:01        
第一作者:姜建芳              
南京理工大学自动化系  
The Disquisition On The Communication Between PC And SIMENTIC S7-300

摘  要:本文主要介绍了在DELPHI和Microsoft?Access数据库开发环境下,PC机应用软件与西门子S7-300系列PLC的数据通信的实现方法。并把此方法应用于复杂控制系统的调试及PC机管理系统与PLC控制系统的信息交换中。
关键字:DELPHI,PRODAVE,数据通信,可编程序控制器,MPI
ABSTRACT:This paper introduces data communication method between PC applications,which take DELPHI and Microsoft Access as their programming language, and SIMENTIC S7-300 PLC (programmable Logic Controller). And the method is applied to debugging of complicated system and data traffic between management system and PLC system.
KEY WORDS:PRODAVE; PLC; Data communication; MPI; DELPHI
1 引言
   西门子工控产品在我国有较高的市场占有率,它的通信及网络产品有着引导世界工控技术潮流的作用,研究西门子工控产品及通信技术的实际应用问题有着广泛普遍的重要意。本文通过对某市级烟草公司的卷烟配送分拣系统的研究,探讨了在Windows环境下,用Delphi开发的数据库应用软件与西门子S7-300之间通信的实现问题。该卷烟配送分拣系统计算机部分结构如图1所示。
附件
   该系统管理计算机接收信息中心局域网发送来的各条送货线路当天的访销信息数据,在此基础上管理计算机建立起以送货线路为单位的配方数据库,将配方数据分批次连续地下传给PLC。PLC根据下传的配方数据对系统控制使其连续分拣和收集,同时系统工作状态及工作数据通过PROFIBUS现场总线在两个触摸屏TP27-10得到动态显示,最后在收集工位自动得到一箱对应一个销售网点的用户配料。为了提高调系统试效率,我们在DELPHI和Microsoft Access数据库平台上编写了用于PLC控制程序的调试软件。
   从上看出该系统能否研制成功必须要解决的问题是:西门子S7-300系列PLC通讯协议不公开,管理计算机和调试计算机上第三方软件编制的程序如何实现PC机与西门子S7-300系列PLC信息交换?通过技术调研和实际调试,我们成功实现了在VB、DELPHI程序开发平台上开发的管理程序及调试程序与S7-300系列PLC通信,顺利完成了系统研制任务。限于篇幅,本文以调试软件的通信实现方法来讨论第三方应用软件与西门子S7-300 PLC的通信问题。
2 调试软件设计
   根据PLC控制程序的调试要求,该调试软件使用DELPHI的数据库技术把事先设计的60个配方数据写入数据库,根据调试需要也可通过人机界面对数据库中的数据进行任意修改,当执行“下传数据”命令时把数据库中的数据字段进行一定数据处理后通过调用PRODAVE S7软件包写入PLC中对应的DB(DATA BLOCKS)块,其中一条记录对应一个DB块,每条记录的一个字段对应该DB块中的一个字。该调试软件也可按一定顺序读PLC中各DB块中的字,并把读取的数据经过处理后写入数据库,以供调试人员检查写入数据的正确性。PC机与PLC CPU318-2DP MPI口之间的数据通信是通过PC/MPI适配器硬件连接实现的。
附件
3 数据通信
3.1通信软件
   实现PC机与PLC之间的数据通信是一个棘手的问题。西门子公司的PRODAVE S7软件包的动态链接库(DLL)提供了大量的基于Windows NT,Windows95/98,Windows3.11或MS-DOS的函数,这样就使用户解决PLC与PC之间的数据交换和数据处理问题变为可能。
3.2通信函数
   在DELPHI的Object Pascal语言中,要访问动态链接库DLL(Dynamic Link Library)中的例程有两种方式。一种是静态引入方式;另一种是动态引入方式。
   本软件使用静态引入方式,即在单元的Interface部分用External指示字列出要从DLL中引入的例程。如果要引入的例程比较多,就可以用一个专门的单元来集中声明要引入的例程。
PLC控制程序调试软件用到的PRODAVE函数主要有:
(1)load_tool PC机与PLC系统初始化链接;
(2)unload_tool 断开PC机与PLC系统链接;
(3)db_read 从PLC的DB块中读数据字;
(4)db_write 向PLC的DB块中写数据字。
3.3通信程序的实现
   在该调试软件中用一个专门的单元集中声明要引入的PRODAVE S7动态链接库的例程,然后在程序中在引用这个单元,即把引入单元“prodave”加到程序的Uses子句。该引入单元的代码如下:
unit prodave;
interface
type
Tadr_table_type=record
adr:byte; segmentid:byte;
slotno:byte; rackno:byte;
end;
function load_tool(no:Byte;name:PChar;adr_table_type:PChar):Integer;stdcall;external "w95_s7.dll";
function unload_tool:Integer;stdcall;external "w95_s7.dll";
function db_read(blockno:integer;no:integer;amount:pointer;buffer:pointer):integer;stdcall;external "w95_s7.dll";
function db_write(blockno:integer;no:integer;amount:pointer;buffer:pointer):integer;stdcall;external "w95_s7.dll";
……
implementation
end.
   在调试软件的主程序中调用该引入单元前,须将软件包prodave.pas文件加到工程中。这样才能在主程序中调用w95_s7.dll中的函数,具体程序调用实现如下:
implementation
uses prodave;
{$R*.DFM}
……
begin
plc_adr_table[0]:=2;{address}plc_adr_table[1]:=0;{segmentid}
plc_adr_table[2]:=2;{slotno}plc_adr_table[3]:=0;{rackno}plc_adr_table[4]:=0;
res:=Load_tool(1,"S7ONLINE",@plc_adr_table);//初始化链接
   函数load_tool的作用在于初始化适配器,初始化参数的地址以及激活选定的界面。程序在读写PLC数据前应该用该函数初始化PC机与PLC的连接。
此函数传送以下3个参数:
  no:此参数设置可激活连接的数量,连接个数可以达到16个。此例中,no=1;
   device:用户驱动设备名称,如MPI驱动器的设备名为“S7ONLINE”;
   plc_adr_table:连接部分的地址列表指针。
   如果没有错误,此函数返回0,否则返回错误信息的相应十六进制代码。下面给出数据下载程序:
begin
error:=false;
table1.first;//定位到配方表的首记录
fori:=2 to 61 do//把60个配方数据写到DB2-DB61
begin
forj:=1 to 42 do//把42个库位的自动配烟数的值高低字节调换位置存入buffer数组
begin
c0:=table1.fields.fields[j].asinteger;
clow:=c0shl8;
chigh:=c0shr8;
cdate:=clow xor chig;
buffer[j-1]:=cdate;
end;
anzahl:=42;
dbno:=i;//DB块
dwno:=1;//第1个数据字,即DW2
res:=db_write(dbno,dwno,@anzahl,@buffer);
   函数db_write()的作用是从PC机的数组变量“buffer”中给PLC的第“dbno”个数据块中从“dwno”个数据字开始写“anzahl”个数据字。如果数据块不存在,将返回错误信息的代码。如果要写的数据字数目的长度超过了数据块的长度,要写的数据字的长度将得到更正,同时此函数还返回303H的错误信息。
   需要特别注意的是:数据在缓冲区存放的顺序是从高字节到低字节。而Object?Pascal语言中,变量类型为word的变量,它的数据存放顺序是从低字节到高字节。因而,在对所读取的数据进行操作时或给PLC数据块中写数据字时要进行相应的处理。
  结束程序之前,必须调用适配器函数unload_tool断开PC机与PLC的连接。否则,将引起PC机死机,或者系统紊乱。
   由于数据上传与数据下载的实现方法相近,限于篇幅,数据上传实现的方法本文不予介绍,请读者参考数据下载实现方法部分。
4 结束语
   运用DELPHI开发环境编写的PLC控制程序调试软件,具有界面友好、人机交互功能方便、数据库功能强大灵活的优点,具有一定的通用性和实用性。而且通过调用PRODAVE S7软件包的动态链接库实现PC机对PLC CPU318-2DP数据的读写操作,不但数据传输数率快,而且数据传输正确率高。在对PLC控制系统的调试过程中,可以大大缩短调试周期,提高工作效率。此通信技术的实现对西门子工控产品的应用及PROFIBUS现场总线的推广应用有着广泛普遍的重要意义。

 








[此贴子已经被作者于2004-3-9 14:10:55编辑过]
烟台东泽----西门子山东地区之代理商,系统集成商
里的打杂的
2603
迷路者
文章数:680
年度积分:50
历史总积分:2603
注册时间:2004/2/6
发站内信
发表于:2004/3/9 14:17:00
#1楼
顶!!
方即是圆、圆即是方,方圆原人为定义,又何必一定要分方圆。。。。。。
1074
mimi
文章数:46
年度积分:50
历史总积分:1074
注册时间:2003/12/23
发站内信
发表于:2004/3/10 10:20:00
#2楼
Thank you!
1092
flying_bird1
文章数:67
年度积分:50
历史总积分:1092
注册时间:2003/12/1
发站内信
发表于:2004/3/11 21:30:00
#3楼
好东西就要顶!
多谢。
971
lovemm
文章数:14
年度积分:50
历史总积分:971
注册时间:2004/2/21
发站内信
发表于:2004/3/11 22:22:00
#4楼
长见识,谢谢
1522
Lin1010
文章数:205
年度积分:50
历史总积分:1522
注册时间:2003/10/22
发站内信
发表于:2004/3/12 8:59:00
#5楼
我也顶一下!
1109
petersu
文章数:164
年度积分:50
历史总积分:1109
注册时间:2003/10/31
发站内信
发表于:2004/3/12 9:09:00
#6楼
我试试。
顶一下!
1000
fly_gk
文章数:14
年度积分:50
历史总积分:1000
注册时间:2004/2/21
发站内信
发表于:2004/3/12 9:40:00
#7楼
此楼内容不符合板块规定,不予显示! 查看原帖内容>>
958
hellolj
文章数:3
年度积分:50
历史总积分:958
注册时间:2004/3/12
发站内信
发表于:2004/3/12 14:36:00
#8楼
我以前是搞单片机的,是PLC新手,请教各位,PLC的RS-232接口不能直接利用普通RS232电缆通讯吗?
958
hellolj
文章数:3
年度积分:50
历史总积分:958
注册时间:2004/3/12
发站内信
发表于:2004/3/12 14:39:00
#9楼
我以前是搞单片机的,是PLC新手,请教各位,PLC的RS-232接口不能直接利用普通RS232电缆与PC通讯吗?我目前需要PLC与带RS232接口的GPRS DTU通讯,必须要利用扩展的RS232模块吗?

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

109.2007