PDA

Просмотр полной версии : Связь ПЛК200 и панели Weintek MODBUS TCP



max-paiine
20.06.2022, 17:44
Добрый день! Пытаюсь разобраться как связать плк 200 и панель опера вейтек по модбас TCP. В кодесис выставил все настройки. Привязал переменные типа word и bool для передачи. Теперь дело дошло до панели оператора. Какое устройство там нужно выбирать? Modbus tcp или modbus tcp zero-addressing? Насколько я понял у плк адреса начинаются с нуля, поэтому при обращении к ним с панели нужно писать смещённый адрес, можете разЪяснить? И ещё вопрос какие функции в easybuilder нужно использовать для чтения/записи регистров типа word и bool. Буду очень благодарен если вы поделитесь опытом.

kondor3000
20.06.2022, 18:01
Добрый день! Пытаюсь разобраться как связать плк 200 и панель опера вейтек по модбас TCP. В кодесис выставил все настройки. Привязал переменные типа word и bool для передачи. Теперь дело дошло до панели оператора. Какое устройство там нужно выбирать? Modbus tcp или modbus tcp zero-addressing? Насколько я понял у плк адреса начинаются с нуля, поэтому при обращении к ним с панели нужно писать смещённый адрес, можете разЪяснить? И ещё вопрос какие функции в easybuilder нужно использовать для чтения/записи регистров типа word и bool. Буду очень благодарен если вы поделитесь опытом.

Нафик тут примеры
3x читать из ПЛК, 4х читать, писать в ПЛК, для нулевого регистра 3х0 ( 4х0 )
На некоторых панелях есть смещение +1, тогда для чтения, записи нулевого регистра 4х1
Про чётность не забудьте, у Овена по умолчанию нет чётности.

zero-addressing в панели будет счёт адресов с нуля.
Для bool 1х читать, 0х читать, писать
А ещё лучше паковать биты в маску и читать, писать их функцией 4ХBit

keysansa
20.06.2022, 18:09
Нафик тут примеры
3x читать из ПЛК, 4х читать, писать в ПЛК, для нулевого регистра 3х0 ( 4х0 )
На некоторых панелях есть смещение +1, тогда для чтения, записи нулевого регистра 4х1
Про чётность не забудьте, у Овена по умолчанию нет чётности.

zero-addressing в панели будет с нуля счёт.

Это если вы в ПЛК определили их как 3 и 4.

max-paiine
20.06.2022, 18:16
Спасибо за разъяснение. И ещё вопрос при чтении, записи переменной word из плк нужно делать преобразование AB->BA?

kondor3000
20.06.2022, 18:21
Спасибо за разъяснение. И ещё вопрос при чтении, записи переменной word из плк нужно делать преобразование AB->BA?

Для WORD (один регистр) переставлять регистры не надо, регистры переставляются для 32 битных переменных DWORD и Float (два регистра). Кстати в Овене они должны быть с чётными адресами 0, 2, 4, 6 и т. д.

max-paiine
22.06.2022, 16:24
переставляются для 32 битных переменных DWORD и Float (два регистра).
А их считывать функцией читать писать их функциями 4хdouble, 3хdouble. Или теми же 4х, 3х, просто меняя тип данных на float?
И вопрос для функции 4xbit, вот такой запрос 4хbit1.0 ?

kondor3000
22.06.2022, 16:33
А их считывать функцией читать писать их функциями 4хdouble, 3хdouble. Или теми же 4х, 3х, просто меняя тип данных на float?
И вопрос для функции 4xbit, вот такой запрос 4хbit1.0 ?

1) 4хdouble, 3хdouble, (2 регистра) и флоат
2) 4xbit 1011- читать, писать 11 бит 10 регистра

max-paiine
22.06.2022, 16:53
То есть получается, если в 3х или 4х указать тип инт, то он считывает один регистр, а если float, то два регистра насколько я понял. Правильно понял?
То есть если я хочу обратить через 4хbit, к 100 регистру 1 биту, запрос такой 4xbit10001

kondor3000
22.06.2022, 18:18
То есть получается, если в 3х или 4х указать тип инт, то он считывает один регистр, а если float, то два регистра насколько я понял. Правильно понял?
То есть если я хочу обратить через 4хbit, к 100 регистру 1 биту, запрос такой 4xbit10001

1) Нет, INT 4х, 16-bit Signed , а Float 4хdouble, 32-bit Float.
2) Правильно, кстати для масок бит, надо ставить тип WORD ( предел 0- 65535) 16-bit Unsigned и 5 знаков до запятой, например для проверки срабатывания бит.

keysansa
22.06.2022, 19:56
То есть получается, если в 3х или 4х указать тип инт, то он считывает один регистр, а если float, то два регистра насколько я понял. Правильно понял?
То есть если я хочу обратить через 4хbit, к 100 регистру 1 биту, запрос такой 4xbit10001

1. Не bit (1 bit) а byte (8 bit).
2. Стандартно Modbus читает word (регистр, 2 byte). Стандартный float занимает 2 word (регистра, 4 byte). Есть float повышенной точности. Применяется достаточно часто, читайте.
3. 0х4 функция - это input registers. Конечно, можно переопределить, но обычно это упакованное значение группы битовых входных сигналов. Для внутренних переменных - используют 0х3 функцию (holding registers - внутренняя память).
4. Нумерация осуществляется по битам в битовых функциях, по регистрам в регистровых.
5. Считать float удобнее функцией 0x10. Она возвращает несколько регистров подряд (столько, сколько запросили). Т.е. можно запросить сразу несколько переменных и получить их быстрее, избежав накладных расходов на заголовки команд

keysansa
22.06.2022, 20:21
1) В общем правильно, у меня INT называется 16-bit Signed, а Float называется 32-bit Float, ошибиться невозможно.

int = word - 1 sign bit, для 16 бит. На знак можно не обращать внимание.
uint = word.

ЗЫ. Для масок - не обязательно word. Просто int и uint - зависят от платформы (4, 8, 16, 32 или 64 бит), а word - всегда 16 бит. Но маски int AND/OR int - работают вне зависимости от платформы.

Dimensy
23.06.2022, 06:13
То есть получается, если в 3х или 4х указать тип инт, то он считывает один регистр, а если float, то два регистра насколько я понял. Правильно понял?
То есть если я хочу обратить через 4хbit, к 100 регистру 1 биту, запрос такой 4xbit10001
нет, с float надо работать через 3xdouble и 4xdouble

kondor3000
23.06.2022, 14:38
нет, с float надо работать через 3xdouble и 4xdouble

Это точно? Думаю даблы добавили позже, для 64 битных типа LREAL

ЗЫ Посмотрел старый проект, точно для флоат стоит 4xdouble

Dimensy
23.06.2022, 16:27
Это точно? Уменя старая версия конфигуратора, там даблов нет и в помине, а флоат передаёт. Думаю даблы добавили позже, для 64 битных типа LREAL

Да, для 16 бит 3х и 4х, для 32 бит 3х_double и 4х_double, для 64 бит 3х_qword и 4x_qword