Просмотр полной версии : Чтение/запись данных по Modbus панели СП310
_Алексей_
22.08.2018, 09:14
Здравствуйте,
подскажите, что возвращают функции чтения/записи данных по Modbus при работе с макросами для панели СП 310-р,
т.е. функции read, reads, write, writes?
Евгений Кислов
22.08.2018, 09:16
Добрый день.
Возвращают BOOL (TRUE - операция выполнена успешно, FALSE - что-то пошло не так).
_Алексей_
28.08.2018, 13:07
Подскажите еще, почему синтаксис функции 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,arrReadModbusRt u);
Евгений Кислов
28.08.2018, 13:16
Можно вызывать Reads вот так:
WORD arrReadModbusRtu[62];
Reads(PLC,1,MODBUS_RTU_REG_4X,0,62,arrReadModbusRt u);
Можно, не вопрос. А теперь попробуйте вот это:
// копируем 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]);
Чтобы не вдаваться в мало кому интересные подробности - в документации приведен универсальный вариант.
_Алексей_
28.08.2018, 13:36
Ясно,
а есть какие-то ограничения при написании скриптов - их размер например, или может быть что-то еще?
Евгений Кислов
28.08.2018, 13:38
Ясно,
а есть какие-то ограничения при написании скриптов - их размер например, или может быть что-то еще?
Да, есть ограничение на размер кода макросов:
СП307-Б/Р, СП310-Б/Р - 131072 байт
СП315-Р - 65536 байт
_Алексей_
28.08.2018, 13:42
А как определить размер?
Копируя код в блокнот например, и судить по размеру его файла?
Евгений Кислов
29.08.2018, 07:43
А как определить размер?
Копируя код в блокнот например, и судить по размеру его файла?
Явно определить размер нельзя. В случае его превышения при загрузке проекта появится информационное сообщение.
Но превысить лимиты при решении большинства задач, мягко говоря, сложновато - и обычно это триггер того, что вы пытаетесь панелью заменить СПК.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot