Кроме UMD надо ещё и структуры выровнять до 3 блоков, где было 1..7 поставить 1..3 в 5 местах1 Переделка компрессора.jpg
У меня все работает и с 3, ничего не съехало.1 Работа.jpg
Последний раз редактировалось kondor3000; 22.11.2023 в 13:52.
Я хотел бы комментария, того кто в теме.
Сохраняемые и постоянные переменные в кодесисе 2.3 не одно и тоже, в отличие о текущей версии 3.5 (объявление persistent уже указывает на энергонезависимость) - это наталкивает на мысль, что директива компилятора работает с обеими областями памяти и не делает между ними разницы. Ведь в справке именно так и написано "энергонезависимая область". Более того в 3.5 есть подобная директива (прагма) {attribute 'no_instance_in_retain'} и там она кое как работает. (правда с ФБ та же беда)
Отсюда - либо опечатка, неверный перевод в мануале CDS 2.3, либо она работает иначе, есть какие-нибудь настройки, либо все зависит от целевой платформы. Вот и интересно - кто то разобрался в этой теме.
По моему все изменил на 3 компрессора, не могли бы вы проверить чего я не учел в коде?
При удалении хоть одного последнего UMD, данные в панели из структуры DATA_for_HMI становятся все по нулям:
Код:IF Active_PID = 1 THEN (*выводим на панель данные по активному пид*) DATA_for_HMI.P_nominal := pid_struct_1.P_Nominal; DATA_for_HMI.P_izmerennoe := P_izmer_pid; DATA_for_HMI.Activ_pid := Active_PID; DATA_for_HMI.Pid_Out := PID_1.OUT; DATA_for_HMI.DBF_Actual := GET_DBF._DBF; DATA_for_HMI.Count_Rele := CTUInst.CV * 4; DATA_for_HMI.Poz_zadvigki := VALVE_REG1.VALVE_REG_NO_POS.VCURPOS; DATA_for_HMI.Impuls_Dovodki := VALVE_REG1.VALVE_REG_NO_POS.PUSH_IMP; DATA_for_HMI.bits2_0_7.0 := VALVE_REG1.VALVE_REG_NO_POS.LESS; DATA_for_HMI.bits2_0_7.1 := VALVE_REG1.VALVE_REG_NO_POS.MORE; ELSIF Active_PID = 2 THEN ; ELSIF Active_PID = 3 THEN ; END_IF;
На первый взляд всё правильно, разбираться во всём коде времени пока нет.
Советую вам проследить все параметры в программе, возможно при удалении UMD, у вас смещаются прямые адреса типа AT%QD,
которых вы бездумно напихали где не надо. Хотя вам писали адрес делать только один, указание на 1 регистр начала структуры.
Поторопился я радоваться ((
Проверил все прописанные адреса на структурах, причем я их в таблицу записываю, все правильно сделано, без накладок.
При добавлении UMD, адресА структур не смещаются. Так же и удаление UMD не влияет на адреса структур так как они идут по адресу QD7… а UMD привязывается к адресам QB6…
Чудес не бывает, если адреса не смещаются при удалении UMD, то они точно смещаются при уменьшении кол-ва 4BYTE. А их для 3 компрессоров надо меньше намного.
Ну и проверку в эмуляции никто не отменял, с подстановкой чисел.
И ещё после таких сильных изменений, обязательно очистить всё, компилировать всё.
Последний раз редактировалось kondor3000; 23.11.2023 в 08:10.
Каким же образом могут влиять добавление/удаление UMD из Мастера на Регистры Slave? Адреса у них разные Например QB6.8.0 добавляю в него "Real Input module" QB6.8.0.0 и при этом на скрине видно что перестает писать значение в регистры P_izmer_pid AT %QD7.42.0
2023-11-23_09-30-41.jpg
Мне всего то нужно добавить еще одну панель ИП320, но теперь ни удалить ни добавить UMD не могу, где же эта паразитная привязка?
Удалил весь код основной программы, оставил только присвоение:
Данные в all_ai[1].ai[8].value есть но в P_izmer_pid они не присваиваются. Куда копать, подскажите пожалуйста?Код:p1^ := original_8AC[1].Read[8,1] * 16#10000 + original_8AC[1].Read[8,2]; P_izmer_pid := all_ai[1].ai[8].value; (*давление измеренное в центральной магистрали*)
Последний раз редактировалось senkos; 23.11.2023 в 10:34.
Могу сказать только одно, у вас не соответствие размера стуруктур, размеру выделенного места в слейве. Вы что то меняете, добавляете, но не учитывая, что и выделенное место тоже надо менять и проверять соответствие. То есть всё делать пошагово, проверяя на залезает ли одна структура на другую.
Кроме того, после сильных изменений, не делаете очистить всё, компилировать всё.
Последний раз редактировалось kondor3000; 23.11.2023 в 11:02.