если ей передано "Количество регистров"
значение = 0, возвращает
TRUE.
Считаю такое поведение некорректным, поскольку запрашивать на чтение
0-ое количество регистров - это ошибка, и функция
должна возвращать TRUE.
А на что жалуетесь-то ?

Сообщение от
andemeno
...
Код:
typedef struct regs_entry_ {
WORD addr;
WORD count;
void* tm;
} regs_entry_t;
BOOL tcpReadInputRegs(regs_entry_t entry) {
static WORD regs[256];
if(Reads(NET_0, 1, MODBUS_TCP_REGS_3X, entry.addr, entry.count, ®s)) {
memcpy(regs, entry.tm, 2*sizeof(entry.count));
return TRUE;
}
return FALSE;
}
..
1.Накой читать в regs а после записывать В regs ИЗ tm (а не наоборот) ?
2.Накой regs вообще ?
3.Ну видоизмените условия как считате нужным. Например:
Код:
BOOL tcpReadInputRegs(regs_entry_t entry) {
if((entry.count >= 1) && (entry.count <= 125) //это ж специфицировано протоколом
&& (еще может чего ?))
return Reads(NET_0, 1, MODBUS_TCP_REGS_3X, entry.addr, entry.count, entry.tm);
else
return TRUE; //и это логично т.к. транзакции не было, значит не было ошибки связи или другая плоскость - FALSE как результат получения данных? Разные логика вообще для связи и для получения данных
}
А если хотите большего интеллекта чем убогий BOOL, то возвращайте какой-нить код типа:
-с_голимыми_входными_в_сад
-транзакция_не_прокатила
-нормуль
и т.п.