|
|
|
@ -34,7 +34,11 @@ void Periphery::config(){
|
|
|
|
|
_canb.configRxMBox(canSpace::DIGITAL_OUTPUT_MBOX, canSpace::MsgID(0x31), canSpace::MsgCtrlReg(0x2)); // Send DO
|
|
|
|
|
|
|
|
|
|
// Remote frame MBOX
|
|
|
|
|
_canb.configTxMBox(canSpace::COMM_VERSION_MBOX, canSpace::MsgID(0x1, false, true), canSpace::MsgCtrlReg(0));
|
|
|
|
|
// _canb.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x10));
|
|
|
|
|
_canb.configTxMBox(canSpace::COMM_VERSION_MBOX, canSpace::MsgID(0x1, false, true), canSpace::MsgCtrlReg(0x4));
|
|
|
|
|
|
|
|
|
|
_canb.enableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX);
|
|
|
|
|
_canb.setTimeOutValue(canSpace::MODBUS_SETTINGS_MBOX, 1000);
|
|
|
|
|
|
|
|
|
|
// Interrupts
|
|
|
|
|
_canb.configSystemIsr(canSpace::I0EN_ENABLE |
|
|
|
|
@ -84,23 +88,7 @@ void Periphery::updateVersionFPGA(){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalInput(){
|
|
|
|
|
Uint16 data = 0;
|
|
|
|
|
_digitalIO.readDigitalIO(data);
|
|
|
|
|
_canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalOutput(){
|
|
|
|
|
if(_canb.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){
|
|
|
|
|
_canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message);
|
|
|
|
|
Uint16 data = _message.mdl.word.LOW_WORD;
|
|
|
|
|
_digitalIO.writeDigitalIO(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::init_modbus_table(){
|
|
|
|
|
void Periphery::initModbusTable(){
|
|
|
|
|
modbusRTU.setInputRegsAddr(400);
|
|
|
|
|
modbusRTU.setOutputRegsAddr(400);
|
|
|
|
|
|
|
|
|
@ -118,13 +106,8 @@ void Periphery::init_modbus_table(){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Periphery::isModbusInit() const{
|
|
|
|
|
return _modbusInitFlag;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::receiveModbusParameters(){
|
|
|
|
|
if (!_modbusInitFlag && (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX))) { // TODO check for init is incorect here maybe
|
|
|
|
|
if (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)) {
|
|
|
|
|
_canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message);
|
|
|
|
|
|
|
|
|
|
MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0;
|
|
|
|
@ -134,13 +117,65 @@ void Periphery::receiveModbusParameters(){
|
|
|
|
|
MODBUSRTU::modbusConfiguration.config.stopbits = static_cast<DSP28335::SCIStopBits>(_message.mdh.byte.BYTE5);
|
|
|
|
|
|
|
|
|
|
modbusRTU.configure(MODBUSRTU::modbusConfiguration);
|
|
|
|
|
|
|
|
|
|
_modbusInitFlag = true; // TODO modbus init function must be here
|
|
|
|
|
_modbusRegCounter = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::getModbusConfiguration(){
|
|
|
|
|
_canb.resetTimeStampCounter();
|
|
|
|
|
_canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX);
|
|
|
|
|
bool requestIsSent = false;
|
|
|
|
|
|
|
|
|
|
while(!_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX)){
|
|
|
|
|
if(_canb.isTimeOut(canSpace::MODBUS_SETTINGS_MBOX)){
|
|
|
|
|
if (!requestIsSent) {
|
|
|
|
|
_canb.resetTimeStampCounter();
|
|
|
|
|
_canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX);
|
|
|
|
|
|
|
|
|
|
_message.mdl.word.LOW_WORD = _softVersion.DSP;
|
|
|
|
|
_message.mdl.word.HI_WORD = _softVersion.CPLD;
|
|
|
|
|
_canb.transmitMsg(canSpace::COMM_VERSION_MBOX, _message);
|
|
|
|
|
|
|
|
|
|
requestIsSent = true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
_canb.clearTimeOutFlag(canSpace::MODBUS_SETTINGS_MBOX);
|
|
|
|
|
_canb.disableTimeOutControl(canSpace::MODBUS_SETTINGS_MBOX);
|
|
|
|
|
_error = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message);
|
|
|
|
|
MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0;
|
|
|
|
|
MODBUSRTU::modbusConfiguration.config.lenght = static_cast<DSP28335::SCICharLenght>(_message.mdl.byte.BYTE1);
|
|
|
|
|
MODBUSRTU::modbusConfiguration.config.baudrate = static_cast<DSP28335::SCIBaudRate>(_message.mdl.word.LOW_WORD);
|
|
|
|
|
MODBUSRTU::modbusConfiguration.config.parity = static_cast<DSP28335::SCIParity>(_message.mdh.byte.BYTE4);
|
|
|
|
|
MODBUSRTU::modbusConfiguration.config.stopbits = static_cast<DSP28335::SCIStopBits>(_message.mdh.byte.BYTE5);
|
|
|
|
|
|
|
|
|
|
modbusRTU.configure(MODBUSRTU::modbusConfiguration);
|
|
|
|
|
_modbusRegCounter = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalInput(){
|
|
|
|
|
Uint16 data = 0;
|
|
|
|
|
_digitalIO.readDigitalIO(data);
|
|
|
|
|
_canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalOutput(){
|
|
|
|
|
if(_canb.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){
|
|
|
|
|
_canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message);
|
|
|
|
|
Uint16 data = _message.mdl.word.LOW_WORD;
|
|
|
|
|
_digitalIO.writeDigitalIO(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::sendModbusDataToCPU(){
|
|
|
|
|
_message.mdl.all = 0; // TODO delete maybe?
|
|
|
|
|
_message.mdh.all = 0;
|
|
|
|
|