java - FINS OMRON PLC Java 命令故障排除

标签 java plc fins

只是说我在尝试为 PLC 准备正确的 FINS 命令时遇到了困难。

拓扑:

  • PC(带有 Java 应用程序)IP:10.1.0.57
  • 欧姆龙 CS1 PLC IP:10.1.0.50

现在正在尝试为 D0100 地址准备消息。消息如下所示:

80 00 02 00 32 00 00 39 00 01 01 01 82 00 64 00 00 01

所以:

ICF: 0x80
RSV: 0x00
GCT: 0x20
DNA: 0x00
DA1: 0x32 (50(dec) which is last octet of PLC IP)
DA2: 0x00
SNA: 0x00
SA1: 0x39 (57(dec) which is last octet of PC IP)
SA2: 0x00
SID: 0x01 (I am increasing this val in every new read)
COMMAND CODE: 0x01 0x01 (read Memory value)
MEM: 0x82
ADDR: 0x00 0x64 (100dec)
BIT: 0x00 (whole address)
LEN: 0x00 0x01 (1 address)

根据文档,一切似乎都正常,但我收到的答案有 16 个字节,如下所示:

70 73 78 83 00 00 00 08 00 00 00 03 00 00 00 03

第二次读取尝试后套接字崩溃。

编辑: 我设法在消息开头添加 FINS header :

46 49 4e 53 00 00 00 1a 00 00 00 02 00 00 00 00

应该是:

0x46: F
0x49: I
0x4e: N
0x53: S
0x00 0x00 0x00 0x1a: 26 - message length
0x00 0x00 0x00 0x02 &
0x00 0x00 0x00 0x00 - part of the response which I got on the beginning. Not sure at all if correct...

现在 Socket 并不严重,但是,如果我尝试读取任何内容,则没有数据。 我缺少什么?我应该在哪里寻找问题来解决问题?我无法直接访问 PLC,但我可以在同一台 PC 上的 OPC Server 中看到数据流。

提前致谢。 亚当

最佳答案

好的,所以答案非常简单......

如果您尝试通过网络连接到 OMRON PLC,则 Host Link header 的最后部分必须代表 PC 的 IP:

46 49 4e 53 00 00 00 1a 00 00 00 02 00 00 00 39

0x39 是 57dec,所以是我的 PC IP 的最后一个八位字节。

更改后一切正常!

关于java - FINS OMRON PLC Java 命令故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49885133/

相关文章:

Java 8 collect() only isPresent() 可选值

c++ - 二进制 PLC 通信的校验和

c# - 毫无异常(exception)地卡在 Socket.Receive 上

c# - 从 C# 向 PLC 发送 FINS 命令

java - CORBA:在命名上下文中动态添加对象

java - 如何避免从不同工作站处理同一项目的配置问题

java - 验证失败后移动文件 (Java)

c# - 通过C#应用程序访问西门子S7-1200

python - S7-1200,Snap7 : Exception: CLI : function refused by CPU (Unknown error)