Разобрался в чём была проблема. Оказалось, что в функции Writes в макросах панели при формировании массива регистров на запись обязательно нужно помнить о том, что последующее обращение к массиву идёт с нулевого элемента! А я начал нумерацию с единицы, поэтому второй регистр у меня не записывался. Сейчас всё в порядке, работает как и задумывалось.
TestTime_1.jpg
Код макроса:
#include <time.h>
DWORD UnixTime_now;
DWORD UnixTime_2000;
DWORD OwenTime;
struct tm time_str;
WORD wYear; // system date-time
WORD wMonth;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD TimeSec[2];
// get system date-time and convert it from BCD to DEC
wYear = 2000 + (LOBYTE(PSW[30]) / 16) * 10 + LOBYTE(PSW[30]) % 16;
wMonth = (PSW[31] / 16) * 10 + PSW[31] % 16;
wDay = (PSW[32] / 16) * 10 + PSW[32] % 16;
wHour = (PSW[33] / 16) * 10 + PSW[33] % 16;
wMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
wSecond = (PSW[35] / 16) * 10 + PSW[35] % 16;
PSW[300] = wYear;
PSW[301] = wMonth;
PSW[302] = wDay;
PSW[303] = wHour;
PSW[304] = wMinute;
PSW[305] = wSecond;
time_str.tm_year = wYear - 1900;
time_str.tm_mon = wMonth - 1;
time_str.tm_mday = wDay;
time_str.tm_hour = wHour;
time_str.tm_min = wMinute;
time_str.tm_sec = wSecond;
time_str.tm_isdst = -1;
UnixTime_now = mktime(&time_str);
time_str.tm_year = 2000 - 1900;
time_str.tm_mon = 1 - 1;
time_str.tm_mday = 1;
time_str.tm_hour = 0;
time_str.tm_min = 0;
time_str.tm_sec = 0;
time_str.tm_isdst = -1;
UnixTime_2000 = mktime(&time_str);
OwenTime = UnixTime_now - UnixTime_2000;
PSW[310]=LOWORD(OwenTime);
PSW[311]=HIWORD(OwenTime);
TimeSec[0]=PSW[310];
TimeSec[1]=PSW[311];
Writes(PLC, 1, MODBUS_RTU_REGS_4X, 61553, 2, TimeSec);
Макрос вызывается кнопкой Выполнить на экране. Кнопка с часами вызывает экран установки времени в панели. Так же на экран выведено содержимое регистров панели PSW[310-311] и регистров ПР103 61553-61554, и сделал ещё вывод этих же регистров в двоичном виде индикаторами. Панель Мастер, ПР103 слейв, подключение через RS485. В свойствах подключения обязательно поставить галку "Изменить порядок регистров".
TestTime_1.zip




Ответить с цитированием