У Read там всегда 0. У Reads в поле указывается кол-во считывемых регистров.
В итоге у функций Read/Reads одинаковый программный интерфейс - по ряду причин удобнее было сделать так.
У Read там всегда 0. У Reads в поле указывается кол-во считывемых регистров.
В итоге у функций Read/Reads одинаковый программный интерфейс - по ряду причин удобнее было сделать так.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Это справедливо отчасти. Только если тип данных будет регистр(TYPE_WORD)
Описание команды в справке
BOOL Read (PortName, SlaveID, DeviceTypeReg, Adr, 0, DataType, &Var);
не полное.
Команда также может читать состояние отдельных бит регистра. Тип данных - бит (TYPE_BIT)
BOOL Read (PortName, SlaveID, DeviceTypeReg, Adr1, Adr2, DataType, &Var);
где
Adr1 - первая часть адреса (номер регистра)
Adr2 - вторая часть адреса (номер бита в регистре)
Например
BOOL bValue;
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 12, TYPE_BIT, &bValue);
Здесь в переменную bValue читается состояние двенадцатого бита регистра PFW256.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
WORD wValue=120;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_WORD, wValue);
Для Write аналогично?
Последний раз редактировалось GSK; 12.04.2017 в 13:18.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Так можно?
BOOL bValue;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 12, TYPE_BIT, &bValue);
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
И еще вопросик)
WORD Adr = 0;
WORD wValue = 0;
DWORD dValue = 0;
/* Так работает */
wValue = 12;
Adr = 700;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_WORD, wValue);
/* Так не работает работает */
dValue = 123.4;
Adr = 701;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, dValue);
Почему во втором случае не работает. Отображается 0.0
dValue - это DWORD, а 123.4 - это float. В руководстве пользователя написано, как работать с float в макросах.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
WORD Adr = 0;
WORD wValue = 0;
DWORD dValue = 0;
float fValue = 0.0;
fValue = 123.4;
Adr = 701;
Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);
Так? А то что то совсем запутался
А разве так не работает?
float Value = 123.4;
int Adr =701;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Value);
ЗЫ.
Тогда уже не
Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);
а так
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 4, fValue);
Последний раз редактировалось petera; 13.04.2017 в 13:19.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg