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

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

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
西门子S7300/400系列的PLC没有公开通讯协议,但西门子公司提供的ProDave软件公 开了一系列库函数,使用计算机高级语言调用这些函数,可实现以MPI的方式与PLC通讯。 当今的高级语言VC#有着非常高效的开发手段,在把基础类库、标准模块都编好的情况下, 开发监控界面的速度比WinCC慢不了多少,但灵活性却是WInCC无法比的。 大家只要找到西门子的ProDave中的动态连接库:W95_S7.DLL,并把它注册到你的计算机即 可(当然,你若有一套完整的ProDave安装程序,安装即可自动注册),然后在C#这边编程 调用,下面来讲解如何在C#中调用动态库。 由于W95_S7.DLL是用C语言编写的,很多函数接口不适用于C#,因此我们可以创建一个C# 类库,把这些函数进行封装,每次开发监控界面调用此类库即可。 一、 C#中调用DLL 库的方法 1、 在名称空间之前使用: usingSystem.Runtime.InteropServices;//用于调用动态库的接口,一定要引用 2、 导入每一个库函数,均要在函数声明之前使用属性字段: [DllImport(w95_s7.dll)] 譬如与PLC 建立连接的库函数load_tool(),应使用如下的方式进行声明: [DllImport(w95_s7.dll)] privateexternstatic intload_tool(bytenr,stringdevice,byte[,]adr_table); 二、 ProDave中的重要库函数介绍 1、 与PLC 建立通讯连接的库函数:load_tool() 该函数必须在其他所有函数调用之前被调用,在C 中的声明为:int load_tool(int nr,char* device,char*adr_table);由于C#在安全模式下不容许使用指针,因此我们把它转换成C#模式: privateexternstatic intload_tool(bytenr,stringdevice,byte[,]adr_table); 参数 nr: 指定连接号1-4,一般设为1 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,s7online,bt); 注:ProDave中的所有库函数均返回整数数据,为0表示调用该函数成功,为其他十进制数 时,可以查找西门子文档,看是什么错误。 可以看出,上面的函数不利于我们使用,我们可对他进行封装: 1、在类之前声明用于传递参数列表的结构: #region 定义与外部联系的结构变量 /// 1 /// 定义MPI 链接参数 /// publicstruct ConnectionInfo{ /// /// 定义CPU的MPI地址 /// publicbyteAddres; /// /// 定义CPU的机架号 /// publicbyte Rack; /// /// 定义CPU的槽号 /// publicbyte Slot; } #endregion 2、编写实现上述功能的公有方法: #region 与动态库函数相对应的公开函数 /// /// 建立连接,同一个连接只容许调用一次 /// /// 连接号1-4 /// 指定链接参数 /// 返回10进制错误号,0表示没有错误 publicstatic intOpen(bytecnnNo,ConnectionInfo[] cnnInfo){ interr; //传递参数不正确 if(cnnInfo.Length=0){ return-1; } byte[,]btr=new byte[cnnInfo.Length+1,4]; //转换链接表 for(inti=0;i btr[i,0]=cnnInfo[i].Addres; btr[i,1]=0; btr[i,2]=cnnInfo[i].Slot; btr[i,3]=

文档评论(0)

nnh91 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档