В руководстве пользователя:
Reads(PLC, 2, MODBUS_RTU_REG_4X, 4, 2, &ArrValue);
По этому по аналогии и предположил:
Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);
А почему здесь 4
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 4, fValue);
Четыре байта?
В руководстве пользователя:
Reads(PLC, 2, MODBUS_RTU_REG_4X, 4, 2, &ArrValue);
По этому по аналогии и предположил:
Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, fValue);
А почему здесь 4
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 4, fValue);
Четыре байта?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Так не работает
А так работает
Еще пример, рабочийКод:float Value = 123.4; int Adr =700; Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(Value));
По этому такая конструкция тоже работаетКод:float a, b, result[4]; Reads(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 2, &a); //Читать из PFW300 значение "a" (Float) Reads(HMI_LOCAL_MCH, 0, TYPE_PFW, 302, 2, &b); //Читать из PFW302 значение "b" (Float) /* Или вариант с функцией READ() Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_DWORD, &a); Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 302, 0, TYPE_DWORD, &b); */ result[0]=a+b; result[1]=a-b; result[2]=a*b; if(b!=0) result[3]=a/b; Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, 304, 8, result); //Записать в PFW304, PFW306, PFW308, PFW310 результаты вычислений в формате Float
Код:float Value[1] = {567.8}; int Adr =700; Writes(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 2, Value);
Последний раз редактировалось petera; 13.04.2017 в 21:07.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Панели пока нет под рукой. Попробую вечером.
Пока хотел бы разобраться.
Кто то же уже использовал FLOAT переменные в макросах.
Хотелось бы взглянуть на чтение и запись в PFW... А то как то все методом проб и ошибок.
И я надеюсь это многим будет полезно!
Понял. Спасибо.
Плохо что нет эмуляции макросов...(((
GSK, если усложнение себе жизни не самоцель (как у некоторых), то просто перед вызовом макроса забирайте данные из PFW в PSW, а после вызова копируйте их из PSW в PFW. В таком стиле:
Безымянный.png
Подскажите пожалуйста что не так?
;
float fValue;
int Adr=0;
int OFFSET=0;
Вот такое не работаетю Панель виснет:
*(float*)(PSW+379) = 11.5;
fValue = *(float*)(PSW+379);
Adr = 701 + OFFSET;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(fValue));
Вот такое работает:
fValue = 123.2;
Adr = 701 + OFFSET;
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, Adr, 0, TYPE_DWORD, Float_2_DWord(fValue));
Вот такое не работаетю Панель виснет:
*(float*)(PSW+379) = 11.5;
Мозги уже кипят(((
Rake Runner спасибо.
Такой вариант я тоже использую...
*(float*) должны находиться по четным адресам.
- и все будет нормально.Код:*(float*)(PSW+380) = 11.5; fValue = *(float*)(PSW+380);
Последний раз редактировалось Евгений Кислов; 18.04.2017 в 15:27.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk