Вход

Просмотр полной версии : Не работает макрос СП300



Сергей Фенев
30.05.2025, 11:19
При различных значениях регистра REG должны включаться различные биты . Ниже код.

В глобальном макросе создан функциональный блок



void lamp_gor(WORD REG, BOOL FWD, BOOL REV, BOOL PUSK, BOOL STOP)

if (REG==1283) // PUSK_FWD
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP
}


else if (REG==1291) // PUSK_FWD (DUBLE)
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP
}


else if (REG==1307) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (PSW[256]==1299) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (PSW[256]==1280) // STOP_FWD
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}


else if (PSW[256]==1281) // STOP_FWD (DUBLE)
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}

else if (PSW[256]==1304) // STOP_REW
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}

else if (PSW[256]==1305) // STOP_REW (DUBLE)
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}


Затем в пользовательском макросе вызываю этот функциональный блок

lamp_gor(PSW[256]),(PSB[256]),(PSB[257]),(PSB[258]),(PSB[259])

При компиляции выдаёт ошибку , помогите разобраться , что не так в коде. Скрин ошибки во вложении84087

petera
30.05.2025, 12:03
При различных значениях регистра REG должны включаться различные биты . Ниже код.

В глобальном макросе создан функциональный блок



void lamp_gor(WORD REG, BOOL FWD, BOOL REV, BOOL PUSK, BOOL STOP)

if (REG==1283) // PUSK_FWD
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP
}


else if (REG==1291) // PUSK_FWD (DUBLE)
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP
}


else if (REG==1307) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (PSW[256]==1299) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (PSW[256]==1280) // STOP_FWD
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}


else if (PSW[256]==1281) // STOP_FWD (DUBLE)
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}

else if (PSW[256]==1304) // STOP_REW
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}

else if (PSW[256]==1305) // STOP_REW (DUBLE)
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}


Затем в пользовательском макросе вызываю этот функциональный блок

lamp_gor(PSW[256]),(PSB[256]),(PSB[257]),(PSB[258]),(PSB[259])

При компиляции выдаёт ошибку , помогите разобраться , что не так в коде. Скрин ошибки во вложении84087



Не хватает скобок в начале и в конце функции
84090

EFrol
30.05.2025, 12:03
Как давно Вы начали изучать язык C?

Сергей Фенев
30.05.2025, 12:11
Мой первый код на С

Сергей Фенев
30.05.2025, 12:12
Спасибо всё работает

Сергей Фенев
30.05.2025, 12:28
84093 При компиляции начал выдавать ошибку "не верное количество параметров" , не пойму что опять не так .

void lamp_gor(WORD REG, WORD FWD, WORD REV, WORD PUSK, WORD STOP)
{

if (REG==1283) // PUSK_FWD
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP
}



if (REG==1291) // PUSK_FWD (DUBLE)
{
SetPSB(FWD); // VKL_FWD
SetPSB(PUSK); // VKL_PUSK
ResetPSB(REV); //OTKL_REW
ResetPSB(STOP); //OTKL_STOP

}



else if (REG==1307) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (REG==1299) // PUSK_REW
{
SetPSB(REV);
SetPSB(PUSK);
ResetPSB(FWD);
ResetPSB(STOP);
}


else if (REG==1280) // STOP_FWD
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}


else if (REG==1281) // STOP_FWD (DUBLE)
{
SetPSB(FWD);
SetPSB(STOP);
ResetPSB(REV);
ResetPSB(PUSK);
}



else if (REG==1304) // STOP_REW
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}


else if (REG==1305) // STOP_REW (DUBLE)
{
SetPSB(REV);
SetPSB(STOP);
ResetPSB(FWD);
ResetPSB(PUSK);
}

}

EFrol
30.05.2025, 12:32
Перечитайте синтаксис языка С ещё раз.
lamp_gor(PSW[256],PSB[256],PSB[257],PSB[258],PSB[259]);

Сергей Фенев
30.05.2025, 12:52
Спасибо большое.

Сергей Фенев
29.09.2025, 12:34
Помогите написать макрос для панели СП310 . Стоит задача - если значение регистра PSW 256 = 0 то необходимо скопировать значения из регистра PLC 3x 1 в PSW 257 и из регистра PLC 3x 2 в PSW 256

petera
29.09.2025, 12:51
Помогите написать макрос для панели СП310 . Стоит задача - если значение регистра PSW 256 = 0 то необходимо скопировать значения из регистра PLC 3x 1 в PSW 257 и из регистра PLC 3x 2 в PSW 256

https://owen.ru/forum/attachment.php?attachmentid=85919&d=1759139263

petera
29.09.2025, 13:01
Вариант

if (PSW[256] == 0) {
Read(PLC, 1, MODBUS_RTU_REG_3X, 0, 0, TYPE_WORD, &PSW[257]);
Read(PLC, 1, MODBUS_RTU_REG_3X, 1, 0, TYPE_WORD, &PSW[256]);
}