PDA

Просмотр полной версии : BCD преобразования даты-времени



-=Vovka=-
10.12.2018, 11:41
Здравствуйте!

Для преобразования из BCD в десятичные данные использую макрос (может кому пригодиться быстро найти):


PSW[320] = (PSW[33] / 16) * 10 + PSW[33] % 16; // Hour
PSW[321] = (PSW[34] / 16) * 10 + PSW[34] % 16;
PSW[322] = (PSW[35] / 16) * 10 + PSW[35] % 16;
PSW[323] = (PSW[32] / 16) * 10 + PSW[32] % 16; //Day
PSW[324] = (PSW[31] / 16) * 10 + PSW[31] % 16;
PSW[325] = 2000 + (LOBYTE(PSW[30]) / 16) * 10 + LOBYTE(PSW[30]) % 16;


Для возвращения обратно в регистры PSW[3х], кроме года, использую такой макрос:


WORD WORD_TO_BCD( WORD DecValue )
{
if (DecValue > 99 || DecValue < 0 ) return 255;
return ((DecValue/10)*6+DecValue);
}

PSW[33] = WORD_TO_BCD(PSW[320]); // Hour
....


А для года как?

Евгений Кислов
10.12.2018, 11:47
Добрый день.
Запись в регистры PSW[3x] не приведет к желаемому результату.
Посмотрите пример Синхронизация времени с ПЛК - там же есть ответ на вопрос про год:
http://www.owen.ru/uploads/sp307_synctime.zip

Но сначала вам надо обновить конфигуратор до версии V2.D3-k5.

-=Vovka=-
10.12.2018, 14:02
Вторая попытка тут ответить:
40314
Два раза нажал "Остаться на странице" и мое сообщение потеряно!

-=Vovka=-
11.12.2018, 11:31
Есть только старая версия!
Ладно, смирился, переделываю...

Очередная "радость" - после установки рекомендуемой последней версии конфигуратора V2.D3k-5 компиляция макросов с ошибками:
создал пустой проект и добавил макрос из двух строчек:
40318
В итоге компиляция с ошибкой:
40319

Сам проект: 40320

Rake Runner
11.12.2018, 11:39
В том, что вы порт не настроили, тоже, наверное, ОВЕН виноват?
Подозреваю, все остальные проблемы тоже из-за подобного подхода к созданию проектов.

40321

-=Vovka=-
11.12.2018, 13:15
В том, что вы порт не настроили, тоже, наверное, ОВЕН виноват?
Подозреваю, все остальные проблемы тоже из-за подобного подхода к созданию проектов.
40321
Я создал новый проект и начал перекидывать по частям из старого, испорченного благодаря совету.
Для отладки временно отключил порт - почему-то не работал макрос из примера http://www.owen.ru/uploads/sp307_synctime.zip. Да и панель без ПЛК тормозит!!!
В какое-то время посыпались ошибки. Методом исключения нашел эту. Не ужели было так тяжело написать, что "возможно отключен порт"?
Оказывается и тут не совсем просто: Включаем порт и обязательно "Мастер"- компиляция без ошибок. Теперь можем отключить порт - ошибок нет!!!! Вот на этом я и попался!
Ладно, теперь знаю о такой особенности, а как насчет комментарий на русском языке в макросах?
После закрытия-открытия окна макроса русские буквы превращаются в "крякозябры". Это тоже моя вина?

-=Vovka=-
11.12.2018, 13:31
Дальше, вопрос к профи Rake Runner-у: как скопировать экран из одного проекта в другой, чтобы все компоненты на экране остались на своих координатах?

Rake Runner
11.12.2018, 13:38
Дальше, вопрос к профи Rake Runner-у: как скопировать экран из одного проекта в другой, чтобы все компоненты на экране остались на своих координатах?

1. Запустить два экзмпляра конфигуратора. В одном открыть исходный проект, в другом - новый.
2. В исходном проекте: ПКМ на экран в дереве проекта - Копировать
3. В новом проекте: ПКМ на узел Экраны в дереве проекта - Вставить
4. В появившемся меню при необходимости указать правильный ID и название экрана

petera
11.12.2018, 13:49
Дальше, вопрос к профи Rake Runner-у: как скопировать экран из одного проекта в другой, чтобы все компоненты на экране остались на своих координатах?

1. Копировать экран, в дереве проекта источника, перейти в целевой проект и в дереве проекта вставить экран

2. В проекте источнике выбрать все элементы, в меню - закрепить, копировать. Перейти в целевой проект и вставить копию на нужном экране.

-=Vovka=-
11.12.2018, 14:03
Rake Runner, petera - так правильно копирует. А я пробовал используя общепринятое Ctrl+C и Ctrl+V. Не понимаю, в чем тут была проблема не потерять координаты...
Кстати, нашел еще одно решение: Ctrl+A, потом "Сгруппировать" и потом уже Ctrl+C и Ctrl+V с разгруппировкой ;)

-=Vovka=-
11.12.2018, 14:29
Нашел еще один глюк:
создаем макрос, делаем глобальную функциональную область и вызываем этот макрос каждую секунду. Этот макрос для своих целей считывает значение времени.
Так вот, если в этот момент менять дату-время, то панель вылетает в "Экран смерти":
40323
Лечение простое: на время изменения даты запрещать работу других макросов :(