Самое простое создать функцию и переставить регистры 1 Перестановка регистров.jpg
Код:FUNCTION SW_DWORD : DWORD VAR_INPUT DW :DWORD; (*полученный DWORD *) END_VAR ________________________________ SW_DWORD := ROL(DW, 16); (* Выход с переставленными регистрами*)
Последний раз редактировалось kondor3000; 30.09.2024 в 10:44.
))
Еще проще создать функцию и переставить как хочешь и сразу всей структуре/массиве
Код:FUNCTION SwapOrder : BOOL (*неисп*) VAR_INPUT PStruct : DWORD; (*pointer to struct..*) SzStruct : DWORD; (*для кратного 4*) Order : WORD; (*2143,3412,4321. Всё остальное как 1234 и не трогается*) END_VAR --------------------------------------- CASE Order OF 2143,3412: SysMemSwap(PStruct, 2, SzStruct / 2); END_CASE CASE Order OF 3412,4321: SysMemSwap(PStruct, 4, SzStruct / 4); END_CASEИногда проще скомпоновать перенос с перестановкой в один футлярКод:Куда-то_в_слейв AT %где_то_в_слейве : ARRAY[..] of / STRUCT / ... Order : WORD := 3412; (*для поиграть*) --------------------------------------- SysMemCpy(ADR(Куда-то_в_слейв), ADR(Откуда-то_из_мастера), SIZEOF(Куда-то_в_слейв)); SwapOrder(ADR(Куда-то_в_слейв), SIZEOF(Куда-то_в_слейв), Order);
В принципе меня устроило как работает предложенное уважаемым kondor3000, но этот вариант тоже может пригодиться в будущем.
Код:Адресс Наименование 1 Напряжение_AN 3 Напряжение_BN 5 Напряжение_CN 7 Напряжение_LN_Avg 15 Напряжение_LL_ср 17 Текущий_ток_А 19 Текущий_ток_В 21 Текущий_ток_С 25 Полная_активная_мощность 27 Полная_реактивная_мощность 29 Полная_общая_мощность 33 Доставленная_активная_энергия 37 Доставленная_реактивная_энергия 41 Активная_мощность_А 43 Активная_мощность_В 45 Активная_мощность_С 47 Реактивная_мощность_А 49 Реактивная_мощность_В 51 Реактивная_мощность_С 53 Полная_мощность_А 55 Полная_мощность_В 57 Полная_мощность_С 71 Частота 511 Дисбаланс_напряжения 513 Дисбаланс_тока
Почему с нечетных если на стр. 10 с четных?
Чем @150 отличается от @144,146,148?
Последний раз редактировалось Валенок; 01.10.2024 в 09:26.
Почему у вас адреса начинаются с первого, когда по мануалу, адреса начинаются со 2.
У вас в итоге и регистры переставлены и читаете вы регистры из разных каналов. Если я прав, то переставлять регистры надо при обычном чтении, а через String и переставлять ничего не надо.
По мануалу функция должна быть 4, а вы всё читаете 3
Последний раз редактировалось kondor3000; 01.10.2024 в 10:36.
Вот это ошибка... из других счетчиков перекочевала.
При функции 3 смещение на 1 регистр, если ставить как в мануале то вообще ничего не читает, сразу в ошибку вываливается. Сейчас перепроверил, при нужной функции чтения 4, без разницы с какого регистра начинать чтение, но поправил на четный как в мануале. Цифры одинаковые считывает! Преобразование все равно нужно
Т.к. ПЛК считывает одинаковые цифры со смещением и без, проверил как все считается в arOPC напрямую со счетчика. В OPC сервере необходимо смещение, т.е. начало с 1 регистра а не со 2 как в мануале. С четного опрос не идет.
К мультиметру @150 есть доступ и там живые данные, у @144,146,148 все по нулям чтобы подать на них напряжение надо включать установку.
Последний раз редактировалось Dmitry_KV; 01.10.2024 в 12:56.