运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf

运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf

ID:52242168

大小:126.27 KB

页数:8页

时间:2020-03-25

运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf_第1页
运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf_第2页
运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf_第3页
运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf_第4页
运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf_第5页
资源描述:

《运用VC#编程通过MPI方式与西门子S7系列PLC通讯.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、西门子S7300/400系列的PLC没有公开通讯协议,但西门子公司提供的ProDave软件公开了一系列库函数,使用计算机高级语言调用这些函数,可实现以MPI的方式与PLC通讯。当今的高级语言VC#有着非常高效的开发手段,在把基础类库、标准模块都编好的情况下,开发监控界面的速度比WinCC慢不了多少,但灵活性却是WInCC无法比的。大家只要找到西门子的ProDave中的动态连接库:W95_S7.DLL,并把它注册到你的计算机即可(当然,你若有一套完整的ProDave安装程序,安装即可自动注册),然后在C#这边编程调用,下面来讲解如何在C#中调用动态库。由于W95_S7.

2、DLL是用C语言编写的,很多函数接口不适用于C#,因此我们可以创建一个C#类库,把这些函数进行封装,每次开发监控界面调用此类库即可。一、C#中调用DLL库的方法1、在名称空间之前使用:usingSystem.Runtime.InteropServices;//用于调用动态库的接口,一定要引用2、导入每一个库函数,均要在函数声明之前使用属性字段:[DllImport("w95_s7.dll")]譬如与PLC建立连接的库函数load_tool(),应使用如下的方式进行声明:[DllImport("w95_s7.dll")]privateexternstaticintloa

3、d_tool(bytenr,stringdevice,byte[,]adr_table);二、ProDave中的重要库函数介绍1、与PLC建立通讯连接的库函数:load_tool()该函数必须在其他所有函数调用之前被调用,在C中的声明为:intload_tool(intnr,char*device,char*adr_table);由于C#在安全模式下不容许使用指针,因此我们把它转换成C#模式:privateexternstaticintload_tool(bytenr,stringdevice,byte[,]adr_table);参数nr:指定连接号1-4,一般设为1

4、device:设备名称,西门子的示例是设为"s7online",测试时,若改成其他名称好像连不上。adr_table:一个二维数组,指定一系列连接参数,依次为:MPI地址、保留为0、CPU槽号、CPU机架号。在一个MPI网络中若有多个CPU时,可指定一个以上的连接列。最后一列的参数的MPI地址应制定为0,以标志参数列结束。e.g.一个MPI网中有两个CPU,他们的MPI地址分别为2和3,槽号均为2,机架号均为0,则可按如下方式调用:byte[,]bt={{2,0,2,0},{3,0,2,0},{0,0,0,0}};interr=load_tool(1,"s7onlin

5、e",bt);注:ProDave中的所有库函数均返回整数数据,为0表示调用该函数成功,为其他十进制数时,可以查找西门子文档,看是什么错误。可以看出,上面的函数不利于我们使用,我们可对他进行封装:<1>、在类之前声明用于传递参数列表的结构:#region定义与外部联系的结构变量///1///定义MPI链接参数///publicstructConnectionInfo{//////定义CPU的MPI地址///publicbyteAddres;//////定义CPU的机架号///publicbyteRack;//////定义CPU的槽号///publicbyteSlot;}

6、#endregion<2>、编写实现上述功能的公有方法:#region与动态库函数相对应的公开函数//////建立连接,同一个连接只容许调用一次//////连接号1-4///指定链接参数///返回10进制错误号,0表示没有错误publicstaticintOpen(bytecnnNo,ConnectionInfo[]cnnInfo){interr;//传递参数不正确if(cnnInfo.Length<=0){return-1;}byte[,]btr=newbyte[cnnInfo.Length+1,4];//转换链接表for(inti=0;ibtr[i,0]=cnnI

7、nfo[i].Addres;btr[i,1]=0;btr[i,2]=cnnInfo[i].Slot;btr[i,3]=cnnInfo[i].Rack;}btr[cnnInfo.Length,0]=0;btr[cnnInfo.Length,1]=0;btr[cnnInfo.Length,2]=0;btr[cnnInfo.Length,3]=0;//调用初始化函数err=load_tool(cnnNo,"s7online",btr);2returnerr;}#endregion这样,我们需要打开连接时,可以使用如下方式:ConnectionInfo[]c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。