You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

64 lines
1.6 KiB
C

#include "avrIOhelper/io-helper.h"
#include "modbus-master.h"
#define IO_SLAVE_ADDR 0x04
volatile uint8_t modbus_io_inStates[4];
volatile uint8_t modbus_io_inStatesBothEdges[4];
volatile uint8_t modbus_io_inStatesRisingEdge[4];
volatile uint8_t modbus_io_inStatesFallingEdge[4];
void modbus_io_read(){
readInputReg(IO_SLAVE_ADDR, 0, 2);
wait_receive(2, (void*)modbus_io_inStates, 100);
readInputReg(IO_SLAVE_ADDR, 100, 2);
wait_receive(2, (void*)modbus_io_inStatesBothEdges, 100);
readInputReg(IO_SLAVE_ADDR, 200, 2);
wait_receive(2, (void*)modbus_io_inStatesFallingEdge, 100);
readInputReg(IO_SLAVE_ADDR, 300, 2);
wait_receive(2, (void*)modbus_io_inStatesRisingEdge, 100);
}
void modbus_io_set_Output(uint8_t slave_adr, uint8_t nr, uint8_t state) {
switch (state) {
case BLINK:
writeCoil(slave_adr,100+nr,1);
wait_write(10);
break;
case TOGGLE:
writeCoil(slave_adr,200+nr,1);
wait_write(10);
break;
case ON:
writeCoil(slave_adr,nr,1);
wait_write(10);
break;
case OFF:
writeCoil(slave_adr,nr,0);
wait_write(10);
break;
}
}
uint8_t modbus_io_read_Input(uint8_t nr, uint8_t type) {
uint8_t state = 0;
switch (type) {
case LEVEL:
state = ioHelperReadBit(modbus_io_inStates, nr);
break;
case EDGE:
state = ioHelperReadBit(modbus_io_inStatesBothEdges, nr);
break;
case RISING:
state = ioHelperReadBit(modbus_io_inStatesFallingEdge, nr);
break;
case FALLING:
state = ioHelperReadBit(modbus_io_inStatesRisingEdge, nr);
break;
}
return state;
}