Цитата Сообщение от Адрей Посмотреть сообщение
Код:
BOOL CH1_Avto,CH1_Pusk,CH1_Stop; WORD MU16[16];
//CH1
Read(HMI_LOCAL_MCH, 0, TYPE_PSW, 301, 0, TYPE_BIT, &CH1_Avto);
Read(HMI_LOCAL_MCH, 0, TYPE_PSW, 301, 4, TYPE_BIT, &CH1_Pusk);
Read(HMI_LOCAL_MCH, 0, TYPE_PSW, 301, 8, TYPE_BIT, &CH1_Stop);
if(CH1_Avto==0){
if(CH1_Pusk==1)MU16[4]=1000; else MU16[4]=0;  
if(CH1_Stop==1)MU16[8]=1000; else MU16[8]=0;} 
if(CH1_Avto==1)MU16[4]=0;MU16[8]=0;
//CH2 
      
Writes(HMI_LOCAL_MCH, 0, TYPE_PSW, 400, 16, MU16);
return;
Сделал по вашему примеру предыдущего проекта, в ФО добавите копировать регистр из PSW400 в 4x0 релейного модуля укажете 16 регистров, да и сам макрос укажите первым в ФО, думаю дальше сами разберетесь.
Касаемо вашего проекта, что нужно знать и с чем столкнетесь.
На основном экране у вас ФО которое непрерывно будет вести запрос на чтение и на запись, это немного не правильно, записывать нужно только в том случае когда будут изменения с кнопок, это вам даст устойчивость системы, неплохо контролировать состояния МУ16.
Когда тестировал модули МВ_8а и МУ16 с СП307, пришёл к выводу, что связь должна идти с одного ФО либо полностью с макроса, я сделал выбор на макрос, почему сейчас объясню.
Дело в том, что в панели весь процесс обрабатывается по очереди, когда вы заполняете объектами экран, формируется та самая очередь, ее можно посмотреть в расширенном режиме если выделить все элементы на экране и с группировать в один объект. Кстати там можно и редактировать порядок выполнения. Есть тонкость и с кнопкой, когда вы нажмете и удерживаете ее процесс выполнения прекращается, не факт, что макрос не отработает, так как у кнопки имеется 4 сценария выполнения, и на момент нажатого то состояния будет циклически выполнятся, как только вы отпустите кнопку, сработает другой сценарий на отпускание кнопки и только потом дойдет очередь до следующих объектов в том числе и ФО (смотрим и эксперементируем с выполнением макроса параллельно либо последовательно). Можно в него и включить макрос. Но честно сказать в этом случае макрос может правильно не отработать я уже с этим сталкивался, и я пришёл к выводу, что с кнопками нужно работать тупо как включил либо выключил, надежно и практично, собственно и исходя этого нужно уже и разрабатывать схемы управления. ФО желательно сделать одно на 65535 экране, но оно появится только в расширенном режиме, но чтобы не углубляться глубже желательно опрос модулей сделать на матросе там же и все контролировать, но как все будет работать через шлюз сказать не могу, нужно все проверять.
сделал всё немного по-другому с учётом вашего примера. в общем, с модуля ввода копировал один регистр в другой регистр панели и инвертировал в нём биты сигнала дистанционного управления. сделал 4 отдельных небольших макроса, которые выполняются по появлению инвертированных битов. макрос сократил до простого - условия убрал, сделал просто запись нулевого значения переменной в нужные регистры модуля вывода. чтобы не захламлять и без того уже забитую ФО, сделал ещё 4 ФО, которые вызывают макрос по появлении сигнала на инвертированном бите.
по вашему примеру появилась проблема того, что выход модуля постоянно моргал. экспериментировал с порядком выполнения параллельным/последововательным, ставил вызов макроса в ФО до чтения регистров в ФО и после, делал в отдельной ФО вызов макроса. в общем, в циклическом режиме выполнения, как вы и говорили, макросы так себе работают, зато по наличию управляющих битов. строго выполняются. не пробовал лишь сделать циклическое выполнение макросов на опрос модулей.
сейчас другая уже проблема: использовать модуль дискретного входа для счёта импульсов, а также обнулять состояние счётчиков с панели. почитал руководство на модуль ввода 16ДН, регистры нашёл. вывел значения счётчиков, вывел 2 кнопки для обнуления. сделал 2 макроса, которые должны записывать значение 0 в регистры счётчиков. выполнение макросов сделал по нажатию кнопок обнуления... по итогу - не идёт. использовал запись слова со значением 0 в регистры модуля, так как запись переменной типа int вызывала подвисание панели и прекращение опроса модулей.