При успешном открытии порта и пока идет обмен, его трогать не нужно. Информацию из буфера, желательно, забирать тогда, когда выполняются оба условия (Complete = TRUE и Exception = 0).
При успешном открытии порта и пока идет обмен, его трогать не нужно. Информацию из буфера, желательно, забирать тогда, когда выполняются оба условия (Complete = TRUE и Exception = 0).
Потестировал примеры из архива на ST и Ваш код, все работает. Вероятно так и буду обходить проблему. Но все равно надо понять в чем косяк. Пробовал реализовать вытаскивание через буфер только при условии что ошибок нет и Cmpl тру, но один черт, нужные параметры появляются, но не висят постоянно. В вашем коде и в примере, в буфере в результате опроса все висит постоянно. В моем случае - в буфере адовые поскакушки, потому что успешный опрос входов модуля происходит раз в несколько секунд и на очень короткое время. И вот тут я и не могу понять где загвоздка. В теории все настройки одинаковые и т.д. Я бы грешил на что-то вроде того, что программа маленькая и банально слишком быстро катается по циклу, но ведь и в примере она такая же. И вот тут-то я и спотыкаюсь об отсутсвие теоретической подготовки =( То есть все настройки одни и те же, я опрашиваю один и тот же модуль с теми же таймаутами и т.д. Но в моей программе на CFC не хватает чего-то, что заставляет работать блок опроса непрерывно, а не как у меня - раз в n секунд и то хз равномерно или нет.
Господа специалисты! Есть еще один архиважный вопрос. Наколдовал я себе и опросы и все остальное. Разобрался, посмотрел на СТ и т.д. Теперь началось самое интересное. Суть вопроса: Есть система, 63-й в роли мастера, опрашивает три частотника, считывая с них рабочую частоту или задание. С этим проблем нет. Но дальше мне нужно записать в два FC-051 командное слово и задание и тут начинается ад. В первый частотник командное слово пишется. Пишу его в регистр 50000, по адресу 49999. Пишу через MB_WR_REGS. При это задание не хочет писаться ни в какую. Пытался писать его и в 50009 и в 3099 - нет и все. А для полного ада - если выставить таймауты вменяемые - то опрос начинает крутится так шустро, что буфер превращается в кашу. И второй частотник не запускается и первый падает в ноль. Если на втором поставить дикий тайминг, что-то вроде 300мс, то первый запускается. а цикл опроса зависает на втором. Подскажите куда копать. Я с форума упер конструкцию с триггерами, которая должна держать в работе блок, покуда он не запишет все, но эта история не работает. В мыслях сделать отдельно опрос первых трех частотников, закрытие порта и отдельную запись в два рабочих. Либо каким-то образом привызявать запись к изменению задания, но я и задание пока не смог забросить в частотник. Код завтра сюда добавлю, сегодня нет возможности. Но может кто сталкивался с такой историей и потычет пальцем в какую сторону копать?
С какого вы пишите в регистр 50000, по адресу 49999 ?
Разберитесь с регистрами сначала. Скрины адресов выложите.
Частотники создают сильные помехи, поэтому обязательно частотники относите подальше, резисторы 120 Ом на вход выход 485 порта, провода в экраны, экраны заземлить перед входом в ПЛК.
Сделайте новый проект и полностью чтение, запись с одним частотником наладьте.
Последний раз редактировалось kondor3000; 20.04.2022 в 16:31.