Сообщение от
paul-th
Ну да, я так примерно и думал об этом формате задания промежутков и событий.
А можно на "С" сваять какое то стандартное и понятное, для меня. реле времени и событие фиксировалось как то там по переднему фронту?
И опять же как быть с выдержкой на delay.она тоже сильно не соответствует тому что задано.
Можно. Используйте регистр PSW38
Например http://www.owen.ru/forum/showthread....l=1#post253752
Или так
Код:
WORD MaxTemp=PSW[260];
WORD CurTemp;
UINT tm;
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
do {
if (*(DWORD*)(PSW + 38) >= tm + 3000) // 3000 это 5 х 60 х 10
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
}
Delay(10);
} while ((CurTemp < MaxTemp) && GetPSBStatus(256));
Про Delay у меня то же есть соображения. Я думаю, что неверно задано объявление
WORD CurMinute;
Нужно
DWORD CurMinute;
Потому, что диапазон чисел у Word от 0 до 65535. И результат операции SleepMinute * 60000 превышает это самое 65535
В моем варианте было
SleepMinute * 60000U