PDA

Просмотр полной версии : не читаются значения мощности



jk3141
06.03.2022, 18:21
добрый день, помогите разобраться: к ПЛК210 подключен WB MAP3E по RS485 значения напряжения и тока читаются правильно, а вот значения мощности не читаются совсем/((( в прочем и другие значения тоже (частота и др)

jk3141
06.03.2022, 18:24
59564 одни нули, хотя Modbus poll их читает

Евгений Кислов
06.03.2022, 18:48
Добрый день.
https://owen.ru/forum/showthread.php?t=28167&p=343792&viewfull=1#post343792

jk3141
08.03.2022, 11:45
спасибо помогло!)))

jk3141
10.03.2022, 06:12
большое спасибо за помощь, еще есть вопрос: как правилино читать данные расположенные в двух и четырёх регистрах?
WORD2_TO_REAL?

Евгений Кислов
10.03.2022, 06:23
большое спасибо за помощь, еще есть вопрос: как правилино читать данные расположенные в двух и четырёх регистрах?
WORD2_TO_REAL?

В руководстве указано, что данные в модуле хранятся в целочисленном виде.
Сначала вам нужно превратить 2 WORD в DWORD или 4 WORD в LWORD - например, с помощью функции SWAP_DATA.
Потом вам нужно домножить получившееся значение на множитель, указанный в руководстве, и присвоить это в переменную REAL.

jk3141
12.03.2022, 11:39
спасибо за подсказку! но возникли трудности с установкой OwenCommunication;

jk3141
12.03.2022, 11:41
59654 что это значит? куда смотреть?

Евгений Кислов
12.03.2022, 11:52
59654 что это значит? куда смотреть?

В моей подписи - "Отладка проектов в CODESYS V3.5", п. 4.3.

jk3141
13.03.2022, 15:59
частично разобрался!! большое спасибо!! правда пришлось весь проект переписать)) помогла OCL.WORD2_TO_DWORD! но остался вопрос как читать и обрабатывать переменные с 4 регистрами?

Евгений Кислов
13.03.2022, 16:21
частично разобрался!! большое спасибо!! правда пришлось весь проект переписать)) помогла OCL.WORD2_TO_DWORD! но остался вопрос как читать и обрабатывать переменные с 4 регистрами?

См. функцию SWAP_DATA.

jk3141
17.03.2022, 17:33
попробовал SWAP_DATA , но так и не понял как ее использовать(( описание почти нет, видео примеров тоже... где бы посмотреть пример использования?

Евгений Кислов
17.03.2022, 17:53
попробовал SWAP_DATA , но так и не понял как ее использовать(( описание почти нет, видео примеров тоже... где бы посмотреть пример использования?

По примеру из справки WirenBoard:
https://wirenboard.com/wiki/WB-MAP3E_Data_Registers



PROGRAM PLC_PRG
VAR
// привязываем к компоненту Modbus
awTotal_AP_Energy_ch2_Modbus: ARRAY [0..3] OF WORD := [16#B4DF, 16#0DFF, 16#0000, 16#0000];
// промежуточное значение в целочисленном виде
lwTotal_AP_Energy_ch2: LWORD;
// итоговое значение с плавающей точкой
lrTotal_AP_Energy_ch2: LREAL;
END_VAR


OCL.SWAP_DATA(ADR(awTotal_AP_Energy_ch2_Modbus), ADR(lwTotal_AP_Energy_ch2), SIZEOF(lwTotal_AP_Energy_ch2), FALSE, FALSE, FALSE);

lrTotal_AP_Energy_ch2 := TO_LREAL(lwTotal_AP_Energy_ch2) * 0.00001 ;


59734 59735

jk3141
19.03.2022, 16:05
спасибо за помощь, но в CFC но это выглядит так((59765

Евгений Кислов
19.03.2022, 16:45
спасибо за помощь, но в CFC но это выглядит так((59765

В терминах CFC функция SWAP_DATA это "элемент", а не использованный вами "компоновщик" (см. панель инструментов).
И обратите внимание, что именно передается на ее входы (см. ADR(...), SIZEOF(...), имена переменных).

jk3141
21.03.2022, 15:57
добрый день! за "компоновщик" спасибо!! просмотрел))) а с остальным не понял... вход массив :awTotal_AP_Energy_ch2_Modbus: ARRAY [0..3] OF WORD := [16#B4DF, 16#0DFF, 16#0000, 16#0000];, выход:lrTotal_AP_Energy_ch2: LREAL;и размер переменной:lwTotal_AP_Energy_ch2: LWORD; (как ив примере) остальное булевые переменные...

Евгений Кислов
21.03.2022, 16:03
добрый день! за "компоновщик" спасибо!! просмотрел))) а с остальным не понял... вход массив :awTotal_AP_Energy_ch2_Modbus: ARRAY [0..3] OF WORD := [16#B4DF, 16#0DFF, 16#0000, 16#0000];, выход:lrTotal_AP_Energy_ch2: LREAL;и размер переменной:lwTotal_AP_Energy_ch2: LWORD; (как ив примере) остальное булевые переменные...

Что именно вы не поняли?

jk3141
21.03.2022, 16:59
59785 почему CODESYS ругается?

Евгений Кислов
21.03.2022, 17:28
59785 почему CODESYS ругается?

Посмотрите, какие типы входов у функции SWAP_DATA в описании библиотеки.
И обратите внимание, как в примере выше выглядит вызов функции:


OCL.SWAP_DATA(ADR(awTotal_AP_Energy_ch2_Modbus), ADR(lwTotal_AP_Energy_ch2), SIZEOF(lwTotal_AP_Energy_ch2), FALSE, FALSE, FALSE);

jk3141
23.03.2022, 16:38
прежде чем обратиться несколько раз смотрел в библиотеку, тип данных:OCL.CAA.PVOID; OCL.CAA.SIZE; что это за тип данных я не знаю

Евгений Кислов
23.03.2022, 17:10
прежде чем обратиться несколько раз смотрел в библиотеку, тип данных:OCL.CAA.PVOID; OCL.CAA.SIZE; что это за тип данных я не знаю

Понятно.

Тогда просто сделайте так, как на скриншоте:

59839

jk3141
26.03.2022, 15:09
Большое спасибо за терпение)) вроде все получилось! без вас я бы не догадался в таком формате вводить данные)))