добрый день. подскажите где копать?написал макрос для синхронизации времени с ПР. Но выдает флаг ошибки PSB51, хотя данные записываются, сделал функциональную область которая непрерывно выполняет данный макрос.
добрый день. подскажите где копать?написал макрос для синхронизации времени с ПР. Но выдает флаг ошибки PSB51, хотя данные записываются, сделал функциональную область которая непрерывно выполняет данный макрос.
Вообще макросы надо вызывать раз в секунду.
А без макросов никак? Их же проверить можно только в живой панели. Давал вам ссылку как сделать без макросов.
https://owen.ru/forum/showthread.php?t=39408
Последний раз редактировалось kondor3000; 10.04.2024 в 16:03.
Прошу прощения, но у меня несколько вопросов к ТС:
Судя по документации:
- системное время в панели храниться по адресам PSW[30] .. PSW[36]
- Функция Write имеет формат BOOL Write (PortName, SlaveID, DeviceTypeReg, AdrReg, AdrBit, 0, DataType, Var); т.е. 8 - параметров, а у Вас всего 7
- вызов функции происходит за пределами if, это значит, что системный день будет передаваться только в 16:55, а все остальное время он равен 0.
1) Системное время можно экспортировать на другие регистры, в настройках проекта
2)Я взял пример из руководства, там 7.
Снимок экрана 2024-04-12 в 11.43.19.png
3) Ну мне и надо чтобы в заданное время он записал свои показания на ПР, а в остальное время ничего больше не делал
Перепроверьте по документации - Вы лишний "0" прилепили
должно быть (по документации) 7 параметров.
Если после ключевого слова Write набрать "(",то появится мастер ввода ВСЕХ параметров функции
тогда ошибиться просто невозможно.
Захват-01.png --> Захват-02.png
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Виноват я смотрел сюда:
Owen.jpg
3) Тогда наверно правильнее:
Надо учесть, что это условие истинно целую минуту - за это время при "непрерывном вызове", макрос просто задолбит ПР-ку.Код:if(...){ a = dec_dey; Write(...); }
Правильнее в глобальном макросе объявить: BOOL isSend;
А в вызываемом:
Код:if(...){ if(!isSend){ a = dec_dey; Write(...); isSend = TRUE; } }else isSend = FASLE;
Последний раз редактировалось EFrol; 12.04.2024 в 10:39.