Здравствуйте,
подскажите, что возвращают функции чтения/записи данных по Modbus при работе с макросами для панели СП 310-р,
т.е. функции read, reads, write, writes?
Вид для печати
Здравствуйте,
подскажите, что возвращают функции чтения/записи данных по Modbus при работе с макросами для панели СП 310-р,
т.е. функции read, reads, write, writes?
Добрый день.
Возвращают BOOL (TRUE - операция выполнена успешно, FALSE - что-то пошло не так).
Подскажите еще, почему синтаксис функции Reads -
Reads(PortName, SlaveID, DeviceRegType, Adr, Length, &ArrVar);
в руководстве пользователя, требует взятия адреса переменной массива, а функция Writes -
Writes(PortName, SlaveID, DeviceRegType, Adr, Length, ArrVar);
не требует?
Ведь они объявлены одинаково:
typedef BOOL (*MacroFReads)(int comID, int staID, int objType, int add1, int regs, void* pRegs);
typedef BOOL (*MacroFWrites)(int comID, int staID, int objType, int add1, int regs, void* pRegs);
struct MACRO_CALL_BACK
{
WORD* pPSW;
BYTE* pPSB;
MacroFRead pRead;
MacroFReads pReads;
MacroFWrite pWrite;
MacroFWrites pWrites;
..................
}Macro;
#define Reads (Macro.pReads)
#define Write (Macro.pWrite)
Имя массива это же указатель на первый его элемент, т.е. содержит адрес первого элемента массива,
а при вызове Reads получается передается адрес этого указателя.
Можно вызывать Reads вот так:
WORD arrReadModbusRtu[62];
Reads(PLC,1,MODBUS_RTU_REG_4X,0,62,arrReadModbusRtu);
Можно, не вопрос. А теперь попробуйте вот это:
и это:Код:// копируем DWORD PSW256-257 в PSW300-301
Reads(HMI_LOCAL_MCH, 0, TYPE_PSW, 256, 2, PSW[300]);
Чтобы не вдаваться в мало кому интересные подробности - в документации приведен универсальный вариант.Код:// копируем DWORD PSW256-257 в PSW300-301
Reads(HMI_LOCAL_MCH, 0, TYPE_PSW, 256, 2, &PSW[300]);
Ясно,
а есть какие-то ограничения при написании скриптов - их размер например, или может быть что-то еще?
А как определить размер?
Копируя код в блокнот например, и судить по размеру его файла?