
该Labview库,用于与西门子PLC进行通信,表现良好。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
与西门子PLC通讯的Labview库,表现良好。以下是英文声明:警告,随附的文件是实验性的VIs,仅供教育目的提供。不提供任何形式的保证。您应充分测试您的代码,并完全理解写入或从运行的PLC读取的含义。PLC通常用于控制危险过程和/或设备。向或从运行状态的PLC写入或读取可能会导致PLC程序或数据区域中断,从而可能造成经济损失、财产损坏、有害物质产生或释放以及/或人员受伤,甚至死亡。在实际设备或过程中使用软件前,请务必在受控环境中对其进行测试并进行认证。据我所知,西门子从未发布过S7协议的详细信息。公开可用的关于S7协议的信息大多基于他人对该协议的观察。一个开源S7数据交换软件包可在http://libnodave.sourceforge.net/获取,该软件包记录了许多S7功能。这些VIs是基于在http://decibel.ni.com/content/docs/DOC-5467上发布的示例构建的,并根据观察和模仿一个协议转换器与S7-300系列PLC之间的S7数据交换进行修改。这些观察是在使用网络协议分析仪Wireshark(可在http://www.wireshark.org/获取)和Wireshark S7-Protokoll插件(可在http://sps-forum.de/showthread.php?p=202763获取)进行的。Address Area参数确定读取和写入的目标PLC内存区域。我仅测试了对数据块(DB)区域的读取和写入操作。您的应用程序应将读取和写入操作限制在仅用于传输的专用读写DB中,从而可以降低意外覆盖的风险。数据类型:S7Com_Transport_Size.ctl是一个环形变量,它包含传输的大小或类型的参数。我仅在S7-300系列PLC上成功使用了BYTE、INT和DINT传输大小。其他大小将保留在环形变量中,以便在其他PLC上进行测试。我不清楚多个字节变量的字节是否以原子方式读取或写入。该示例包含两个顶层VI:S7Com_Once.vi和S7Com_W+R_Loop.vi。S7Com_Once.vi每次执行一次读取或写入操作;它将数组中的I32写入目标PLC,并将目标PLC中的I32读入数组中;写入的目标PLC字节数与要写入的数组元素数量成正比,取决于传输大小参数。S7Com_W+R_Loop.vi定期向目标PLC中的一对DB写入和读取数据;为了使用它,您的Step7 PLC项目应提供两个Data Blocks, DB11和DB12。(参见db11&12.PNG屏幕截图图像以查看其布局)。下载DB后,使用VAT监控并更改DB值(如VI所示)。正如VI所示,传输大小为DWORD。(包含示例VI (S7Com_to_PLC(SubVI).vi 和 S7Com_from_PLC(SubVI).vi) 用于在Labview和S7 PLC DB之间映射变量。)在示例中使用了相同的簇类型定义(S7Com_PLC_Data.ctl),但这并非必需的要求 。当更改映射时,您必须计算从PLC读取变量的大小以正确设置Read Length参数;Read Length参数以传输大小单位表示;Write Length参数来自要写的数组的大小,如果写的数据数组大于预期, 可能会发生数据覆盖现象 。Hex byte 和 hex byte array 类型定义被创建用于格式化内部数据结构以显示十六进制值,以便可以轻松地将其与Wireshark 数据包内容进行比较 。这些 VI 在 NI 9072 cRIO 上经过最小测试 。这并非完成工作, 需要改进错误检查, 清洁 S7 响应解码, 并进行恶意数据的压力测试 。
全部评论 (0)


