-
Вложений: 2
Макс, попробуйте
Вложение 15574
Скрипт без изысков. Читает Input регистр 0х5, результат отображается в регистре PSW300.
Пять лишних байт учел.
Код:
//В примере адрес устройства равен 1
//Данные Input 0x05 будут регистре PSW300
//*************************************************
BYTE snd[8]={0x01,0x04,0x00,0x05,0x00,0x01};//буфер для посылки команды slave
//[0]-адрес устройства(0x01)
//[1]-Код функции ModbusRTU 0x04 -чтение Input registers
//[2]-ст.байт адреса начального регистра(0x00)
//[3]-мл.байт адреса начального регистра(0x05)
//[4]-ст.байт количества регистров(0x00)
//[5]-мл.байт количества регистров(0x01)
//[6]-ст.байт CRC(Определим ниже)
//[7]-мл.байт CRC(Определим ниже)
BYTE rcv[12];//буфер для приема ответа от slave+лишние 5 байт
//[0]-адрес устройства
//[1]-Код функции ModbusRTU-чтение Input registers 0x04
//[2]-счетчик байт(0x02)
//[3]-мзначение регистра Hi
//[4]-значение регистра Lo
//[5]-ст.байт CRC
//[6]-мл.байт CRC
//лишние 5 байт
//[7]
//[8]
//[9]
//[10]
//[11]
snd[6]=HIBYTE(Crc(snd,6));//дополнить команду CRC, сначала Hi
snd[7]=LOBYTE(Crc(snd,6));//затем Lo
Enter(PLC);//Захватить порт PLC
Send(PLC,snd,8);//Отправить команду
Receive(PLC,rcv,12,1000,6);//Получить ответ (тайм-аут 1000мс)
PSW[300]=MAKEWORD(rcv[4],rcv[3]);
Leave(PLC);//Освободить порт
-
Вложений: 3
Еще один вариант.
Вложение 15576
Здесь глобальная функция чтения одного инпут регистра
Вложение 15577
Можно было бы сделать чтение сразу нескольких регистров, но не ясно сколько лишних байт будет от частотника
-
Спасибо при использовании функций проблема решилась :)
-
не стал паять новую тему.
зачем заземляя что либо (например какой нибудь прибор) между землей и этим самым прибором ставят конденсатор?
ар