我们有带以太网通讯端口的西门子 PLC S7-300。哪种类型的 java 或其他语言编码可用于获取 plc 的帧数据?该 PLC 仅与 step-7 软件通信。
这个帧结构数据也可以存储在一些文本文件的xml中,这样我们就可以将它连续发送到互联网上。
请帮我
有 3rd 方库允许这样做。在我们公司,我们正在使用Accon AGLink。它是一个本地库,但它也提供了一个 .NET 包装器。图书馆有点快。你也可以试试这个(indi.an PLCCom),它是托管的,不是那么快,但它有一个免费版本。
或者,您可以尝试设置OPC服务器并使用 OPC 客户端读取 PLC 数据,但它们有点贵。
看看Snap7,它是用 C 语言编写的,但有许多可用的包装器和端口,包括 Python、Node.js、.NET、C#、Arduino,以及一个名为Moka7的 Java 语言,因为你问过。
来自官方文档:
Snap7 是一个开源、32/64 位、多平台以太网通信套件,用于与 Siemens S7 PLC 进行本地接口。部分支持新 CPU 1200/1500、旧 S7200、小 LOGO 0BA7/0BA8 和 SINAMICS 驱动器。
我假设您的设置包含在带有 CP 343 通信模块的 S7-300 CPU 上。要从 CPU 读取数据,系统必须运行 S7 服务器(可通过NetPro配置,在SIMATIC Manager中,如Siemens 调试手册中所述)。远程机器应该使用 Snap7 客户端库。
该库包括读取不同内存区域的函数,例如进程输入 (I)、进程输出 (Q)、merkers (M)、定时器 (T) 和计数器 (C),以及通用数据块 (DB) )。如果服务器已启用,并且配置不受限制(例如特定 IP 地址),则默认情况下客户端应至少可以访问 I、Q 和 M,以及某些系统属性(如 CPU 型号)和固件版本)。
对于您使用 Java 的情况,请查看 Moka7 文档,该文档可在同一下载包中找到。有几个代码示例可以开始。
如果成功,该ReadArea
函数将返回您指定的字节的十六进制数据(即开始读取的内存位置和字节数)。作为备注,请记住大多数 Siemens PLC 是 big-endian,因此如果您正在读取保存不同类型数据的内存区域,则可能需要进行转换。