Проще говоря, у меня нет времени, пытаясь подготовить правильную команду FINS для ПЛК.

Топология:

  • ПК (с приложением Java) IP: 10.1.0.57
  • IP-адрес ПЛК OMRON CS1: 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 в начало сообщения:

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 не сокрушает, но если я пытаюсь что-то прочитать, данных нет. Что мне не хватает? Куда мне обратиться, чтобы устранить проблему? У меня нет прямого доступа к ПЛК, но я вижу поток данных в OPC Server на том же ПК.

Заранее спасибо. Адам

1
Adam Macierzyński 17 Апр 2018 в 21:31

1 ответ

Лучший ответ

Итак, ответ был довольно простым ...

Последняя часть заголовка Host Link должна представлять IP-адрес ПК, если вы пытаетесь подключиться к ПЛК OMRON через сеть:

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

0x39 - это 57dec, поэтому последний октет моего IP-адреса компьютера.

После этого изменения все работает!

0
Adam Macierzyński 19 Апр 2018 в 09:43