добрый день. подскажите где копать?написал макрос для синхронизации времени с ПР. Но выдает флаг ошибки PSB51, хотя данные записываются, сделал функциональную область которая непрерывно выполняет данный макрос.
Вид для печати
добрый день. подскажите где копать?написал макрос для синхронизации времени с ПР. Но выдает флаг ошибки PSB51, хотя данные записываются, сделал функциональную область которая непрерывно выполняет данный макрос.
Вообще макросы надо вызывать раз в секунду.
А без макросов никак? Их же проверить можно только в живой панели. Давал вам ссылку как сделать без макросов.
https://owen.ru/forum/showthread.php?t=39408
Прошу прощения, но у меня несколько вопросов к ТС:
Судя по документации:
- системное время в панели храниться по адресам PSW[30] .. PSW[36]
- Функция Write имеет формат BOOL Write (PortName, SlaveID, DeviceTypeReg, AdrReg, AdrBit, 0, DataType, Var); т.е. 8 - параметров, а у Вас всего 7
- вызов функции происходит за пределами if, это значит, что системный день будет передаваться только в 16:55, а все остальное время он равен 0.
1) Системное время можно экспортировать на другие регистры, в настройках проекта
2)Я взял пример из руководства, там 7.
Вложение 75177
3) Ну мне и надо чтобы в заданное время он записал свои показания на ПР, а в остальное время ничего больше не делал
Перепроверьте по документации - Вы лишний "0" прилепили
должно быть (по документации) 7 параметров.
Если после ключевого слова Write набрать "(",то появится мастер ввода ВСЕХ параметров функции
тогда ошибиться просто невозможно.
Вложение 75178 --> Вложение 75179
Виноват я смотрел сюда:
Вложение 75180
3) Тогда наверно правильнее:
Надо учесть, что это условие истинно целую минуту - за это время при "непрерывном вызове", макрос просто задолбит ПР-ку.Код:if(...){
a = dec_dey;
Write(...);
}
Правильнее в глобальном макросе объявить: BOOL isSend;
А в вызываемом:
Код:if(...){
if(!isSend){
a = dec_dey;
Write(...);
isSend = TRUE;
}
}else isSend = FASLE;