PDA

Просмотр полной версии : запись данных функция 0х10



Владимир Технос М
09.12.2019, 14:55
Помогите разобраться, у меня панель СП-307 реализую функцию записи 0х10


void MY_16WRITE(BYTE DevAdr, WORD RegAdr, WORD Mask, WORD Error)
{
BYTE DataReceive[12]; // sending modbus frame
BYTE DataSend[11]; // receiving modbus frame

DataSend[0]=DevAdr; // Slave ID (network address of Slave device)
DataSend[1]=0x10; // function code (0x10 - Write Multiple Registers)
DataSend[2]=HIBYTE(RegAdr); // register address (RegAdr)
DataSend[3]=LOBYTE(RegAdr);
DataSend[4]=0x00; // bytes 4-5 - quantity of written registers
DataSend[5]=0x01;
DataSend[6]=0x02; // quantity of sending bytes
DataSend[7]=HIBYTE(Mask); // written variable (Mask)
DataSend[8]=LOBYTE(Mask);
DataSend[9]=HIBYTE(Crc(DataSend,9)); // CRC
DataSend[10]=LOBYTE(Crc(DataSend,9));

Enter(PLC); // catch PLC-port
Send(PLC,DataSend,10); // send 11 bytes from DataSend array
Receive(PLC,DataReceive,8,1000,6); // receive 8 bytes with timeout 1000 ms


Leave(PLC); // leave PLC-port
Delay(10); // delay 100 ms




if (DataReceive[1]!=0x10) // if message from slave have error code...

PSW[500] = 0xcc; else PSW[500] = 0xaa;



//PSW[500] = DataReceive[0];
PSW[501] = MAKEWORD(DataReceive[1],DataReceive[2]);
PSW[502] = DataReceive[2];
PSW[503] = DataReceive[3];
PSW[504] = DataReceive[4];
PSW[505] = DataReceive[5];
PSW[506] = DataReceive[6];
PSW[507] = DataReceive[7];
PSW[508] = DataReceive[8];
PSW[509] = DataReceive[9];
PSW[510] = DataReceive[10];
PSW[511] = DataReceive[11];
}

код, вроде как рабочий. я его уже применял

а сейчас нужно убедиться, что устройство отвечает на данный запрос.

Пытаюсь принять ответную посылку по модбасу, на ничего не приходит.

Что делаю не так?

Устройство подключено, порт РLC, читаю из этого устройства 3 и 4 функцией успешно

Lazarev
16.02.2022, 07:16
Добрый день, подскажите что подается в качестве аргумента "WORD Mask" ?