Ниже полный код макроса для модуля МУ110, включающий сигнальную лампу в случае превышения уставки.
Код:
// (c) PeterA
//В примере адрес устройства равен 2
//*************************************************
BYTE snd[11]={0x02,0x10,0x00,0x32,0x00,0x01,0x02};//буфер для посылки команды slave
//[0]-адрес устройства(0x02) 2
//[1]-Код функции ModbusRTU 0x10 -запись нескольких регистров
//[2]-ст.байт адреса начального регистра(0x00)
//[3]-мл.байт адреса начального регистра(0x32) 50
//[4]-ст.байт количества регистров(0x00)
//[5]-мл.байт количества регистров(0x01)
//[6]-количество байтов(0x02)
//[7]-ст.байт значения в регистре(Определим ниже)
//[8]-мл.байт значения в регистре(Определим ниже)
//[9]-ст.байт CRC(Определим ниже)
//[10]-мл.байт CRC(Определим ниже)
BYTE rcv[8];//буфер для приема ответа от slave
//[0]-адрес устройства
//[1]-Код функции ModbusRTU-чтение нескольких регистров 0x10
//[2]-ст.байт адреса начального регистра(0x00)
//[3]-мл.байт адреса начального регистра(0x32)
//[4]-ст.байт количества регистров(0x00)
//[5]-мл.байт количества регистров(0x01)
//[6]-ст.байт CRC
//[7]-мл.байт CRC
WORD A=3;
//Тут начало алгоритма
snd[7]= 0; //ст.байт маски
if (PSW[256]>=A) {
snd[8]= 1; //мл.байт маски
snd[9]=HIBYTE(Crc(snd,9));//дополнить команду CRC, сначала Hi
snd[10]=LOBYTE(Crc(snd,9));//затем Lo
//Crc() -внутренняя функция, ее писать не надо
}
else {
snd[8]= 0; //мл.байт маски
snd[9]=HIBYTE(Crc(snd,9));//дополнить команду CRC, сначала Hi
snd[10]=LOBYTE(Crc(snd,9));//затем Lo
//Crc() -внутренняя функция, ее писать не надо
}
Enter(PLC);//Захватить порт PLC
Send(PLC,snd,11);//Отправить команду
Receive(PLC,rcv,8,1000,6);//Получить ответ (тайм-аут 1000мс)
Leave(PLC);//Освободить порт