PDA

Просмотр полной версии : демо режим на 30 дней, потом пароль.



Artem
26.04.2010, 20:30
здравствуйте.
начальство поставило интересную задачу. поставляем готовые цеха и 50% оплаты идет до монтажа и 50% после оплаты. естественно вторые 50% постоянно задерживаются.
начальство, чтобы ускорить процесс выплаты, попросило доработать программу. а именно цех свободно работает в течении 30 дней например или определенное количество циклов, а потом стопориться и через ип320 ждет ввода пароля, который мы сообщаем после полной оплаты.

как организовать данный вопрос, что бы умные слесаря заказчика не взломали эту защиту простыми ребутами? попробовал сегодня побаловаться с Retain и Persistent. хватило почему то на 5 ребутов, потом стало в ноль скидываться.

как сделать чтоб количество выполненных циклов не обнулялось ни при каких обстоятельствах?

lara197a
26.04.2010, 22:12
в плк и панели есть часы реального времени, можно по дате.
можно и по наработке.
к примеру при включении какого-то агрегатая, запускаете генератор и считаете импульсы.
можно через Rtc.

Artem
27.04.2010, 10:34
в плк и панели есть часы реального времени, можно по дате.
можно и по наработке.
к примеру при включении какого-то агрегатая, запускаете генератор и считаете импульсы.
можно через Rtc.
Так оно и есть. Только при тыкании в сброс это все благополучно в ноль превращается, как от этого защититься?

Gans
27.04.2010, 10:46
Объявление переменной должно быть сделано в ниже указанном виде и значение переменной не будет утеряно при ресете и выключении питания :-) + почитать в «CoDeSys_V23_RU.pdf» про «retain».

Пример объявления переменой dwTemp как retain.
PROGRAM PLC_PRG
VAR
END_VAR
VAR RETAIN
dwTemp: DWORD;
END_VAR

Artem
27.04.2010, 11:48
Разобрался. Филоненко Владислав так прокомментировал (http://www.owen.ru/forum/showpost.php?p=39777&postcount=4) данный вопос. При тыкании в сброс retain ниче не помнит. Жаль. Видимо никак не сделать демку... или есть еще варианты?

lara197a
27.04.2010, 12:06
A вы записывайте переменную в ретайн периодически сами.
к примеру раз в час.
если сбросят в ресет, то потеряете какое-то время, не более.

lara197a
27.04.2010, 12:29
ну типа генератор и раз в период по фронту значение в ретайн.
а при пуске это значение записать обратно в директорию, к примеру.
или при смене часа, через сислиб тайм, по встроеным часам и пусть обнуляют.

Зуйков Александр
27.04.2010, 13:07
А может обойтись таки без retain и зашить дату окончания работы константой? И сравнивать с полученным с syslibtime. Тогда не будет такой волокиты.
Или сделать retain, а константу для значения по умолчанию, если retain вдруг сбросится.
Ну и последний метод - syslibfile. Записывать в файл введенные значения уставки времени. А сравнивать с текущим при старте программы и потом периодически. Хотя тут уже мороки сильно больше.

lara197a
27.04.2010, 13:09
заколебается пользователь каждые 59 мин часы сбрасывать. если они такие умные, то сами и прогу перепишут. это еще нужно знать, где искать сброс.

Artem
29.04.2010, 21:25
Скажите почему так происходит? Примерно 4 раза из 10 при тыкании в сброс переменные retain сохраняются. Что это? Почему такая неопределенность?