Здравствуйте.
Пишу макрос для СП310
static WORD ArrValueDW[2];
static float RegFloat;
WORD Temp1;
if (GetPSBStatus(318)==1) {//1
if (Reads(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 2, &ArrValueDW)) {//2
RegFloat=*(float*)(ArrValueDW);//float
*(float*)(PSW+318)=RegFloat;//PSW[318] DWord float
RegFloat=RegFloat*10.0;
Temp1=(WORD)RegFloat;
PSW[320]=Temp1;//PSW[320] Word Dec
if (Write(PLC, 82, MODBUS_RTU_REG_4X, 186, 0, TYPE_WORD, Temp1)) {//Wr adr 0x0080+58=186
ResetPSB(318);
} //Wr
}//2
}//1
При вводе данных в PFW[300] устанавливается бит PSB[318] и панель сразу зависает ( не реагирует на нажатия)...что я делаю не так?
не понял про 318....PSB318 это бит уведомления о изменении параметра(может быть любого номера)
а PSW[318] Dword =4 байта(т.е. регистры 318 и 319)
Последний раз редактировалось GIGSatellite; 17.05.2023 в 11:22.
это как то совсем не научно ((( а других ошибок в коде нет?
у Вас есть пример работы с PFW?
команда Reads возвращает True если успешно прочиталось...вроде так
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
if (GetPSBStatus(318)) {//1
ResetPSB(318);
SetPSB(400);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 300, 0, TYPE_DWORD, &ArrValueDW);
/* RegFloat= *(float*)(ArrValueDW);//float
//RegFloat=12.3;
*(float*)(PSW+318)=RegFloat;
RegFloat=RegFloat*10.0;
Temp1=(WORD)RegFloat;
PSW[320]=Temp1;*/
// if (Write(PLC, 82, MODBUS_RTU_REG_4X, 186, 0, TYPE_WORD, Temp1)) {//Wr adr 0x0080+58=186
// ResetPSB(318);
// } //Wr
}//1
при вводе значения в PFW[300] виснет