Помогите разобраться, у меня панель СП-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 функцией успешно