И все же, проблема есть.
Читаю макросом данные из ПЛК110 - регистры 0 - 16 в регистры PSW панели СП307.
Вывожу регистр 4 на экран в виде шестнадцатеричного числа - в нем ноль, как и положено. В регистре PSW260 при этом находится значение 255 (0xFF, которое фактически записано в регистр 13 (счет, номера регистра, естественно, с нуля)
Что не так в этом макросе, вызываемом либо раз в секунду, либо непрерывно при помощи глобальной функциональной области?
В нем всего лишь читаются 17 регистров в массив, если нет ошибки обмена с ПЛК110.
Почему вдруг в регистре PSW260 вместо регистра 4 регистр 13?
Ставил при реализации проекта задачу оптимизации быстродействия, привязал к PSW сотни экранных элементов.
В чем причина-то? Моя ошибка - в упор не вижу? ограничения длины буфера или длины сообщения панели, не указанные в документации?
На ПЛК110 грешить трудно - он что - в длинном сообщении передает не то, что в коротком, когда я привязываю регистр к цифровому индикатору?
WORD RdBuf[100];
// Read from PLC110 - DI to PSW256, PSW257, PSW258 DO to PSW259, 260
Reads(PLC, 1, MODBUS_RTU_REGS_4X, 0, 17, &RdBuf);
if (GetPSBStatus(51))
{
;
}
else
{
PSW[256] = RdBuf[0];
PSW[257] = RdBuf[1];
PSW[258] = RdBuf[2];
PSW[259] = RdBuf[3];
PSW[260] = RdBuf[4];
PSW[261] = RdBuf[5];
PSW[262] = RdBuf[6];
PSW[263] = RdBuf[7];
PSW[264] = RdBuf[8];
PSW[265] = RdBuf[9];
PSW[266] = RdBuf[10];
PSW[267] = RdBuf[11];
PSW[268] = RdBuf[12];
PSW[260] = RdBuf[13];
PSW[270] = RdBuf[14];
PSW[271] = RdBuf[15];
PSW[272] = RdBuf[16];
}





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