diff --git a/Periphery.cpp b/Periphery.cpp index e8dec12..caa247c 100644 --- a/Periphery.cpp +++ b/Periphery.cpp @@ -5,20 +5,12 @@ Periphery::Periphery() : _digitalIO(), _zone6_ptr(reinterpret_cast(0x100000)), _scib(ScibRegs), - // _modbusSetup(), - // _modbusConfiguration(), - // _crc(), - // _intervalMeasure(CpuTimer2), - // _modbusPort(_scib, _intervalMeasure, _crc), - // _ASUTP(_crc), - _modbusRTU(CpuTimer2, _scib), - _modbusInitFlag(false) + _modbusInitFlag(false), + _modbusRegCounter(0), + modbusRTU(CpuTimer2, _scib) { _softVersion.DSP = 202; _softVersion.CPLD = 0; - - elementCounter = 0; - test = 0; } @@ -64,33 +56,10 @@ void Periphery::config(){ //------------------------------------------Init Modbus---------------------------------------------------------- - // _modbusSetup.gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup; - // _modbusSetup.gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set; - // _modbusSetup.gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear; - - // _intervalMeasure.reset(); - // _intervalMeasure.set_magic(19); - - // _modbusPort.setup(_modbusSetup); - - // modbus_port_configuration.node_id = 0x5; - // modbus_port_configuration.config.baudrate = DSP28335::BR9600; - // modbus_port_configuration.config.parity = DSP28335::NO; - // modbus_port_configuration.config.stopbits = DSP28335::ONE; - // modbus_port_configuration.config.lenght = DSP28335::LEN8; - - // modbus_port.configure(modbus_port_configuration); - - // clear_array((uint16_t *)hmi.rxStack, sizeof(hmi.rxStack)/sizeof(uint16_t)); - // clear_array((uint16_t *)hmi.txStack, sizeof(hmi.txStack)/sizeof(uint16_t)); - - // _modbusPort.setRXBuffer((uint16_t*)_ASUTP.rxStack, &_ASUTP.rxLength); - // _modbusPort.setTXBuffer((uint16_t*)_ASUTP.txStack, &_ASUTP.txLength); - MODBUSRTU::modbusSetup.gpio_re_de_setup = &DSP28335::GPIO::gpio_scib_re_de_setup; MODBUSRTU::modbusSetup.gpio_driver_enable = &DSP28335::GPIO::gpio_scib_re_de_set; MODBUSRTU::modbusSetup.gpio_receiver_enable = &DSP28335::GPIO::gpio_scib_re_de_clear; - _modbusRTU.setup(MODBUSRTU::modbusSetup); + modbusRTU.setup(MODBUSRTU::modbusSetup); } @@ -134,97 +103,42 @@ void Periphery::receiveModbusParameters(){ if (!_modbusInitFlag && (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX))) { // TODO check for init is incorect here maybe _canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _message); - // _modbusConfiguration.node_id = _message.mdl.byte.BYTE0; - // _modbusConfiguration.config.lenght = static_cast(_message.mdl.byte.BYTE1); - // _modbusConfiguration.config.baudrate = static_cast(_message.mdl.word.LOW_WORD); - // _modbusConfiguration.config.parity = static_cast(_message.mdh.byte.BYTE4); - // _modbusConfiguration.config.stopbits = static_cast(_message.mdh.byte.BYTE5); - - // _modbusPort.configure(_modbusConfiguration); - MODBUSRTU::modbusConfiguration.node_id = _message.mdl.byte.BYTE0; MODBUSRTU::modbusConfiguration.config.lenght = static_cast(_message.mdl.byte.BYTE1); MODBUSRTU::modbusConfiguration.config.baudrate = static_cast(_message.mdl.word.LOW_WORD); MODBUSRTU::modbusConfiguration.config.parity = static_cast(_message.mdh.byte.BYTE4); MODBUSRTU::modbusConfiguration.config.stopbits = static_cast(_message.mdh.byte.BYTE5); - _modbusRTU.configure(MODBUSRTU::modbusConfiguration); + modbusRTU.configure(MODBUSRTU::modbusConfiguration); _modbusInitFlag = true; // TODO modbus init function must be here + _modbusRegCounter = 0; } } -void Periphery::processExternalModbus(){ - if(_modbusRTU._dataHandler.inputRegisters.address_range(elementCounter + _modbusRTU.inputRegStartAddr)){ - _modbusRTU._dataHandler.inputRegisters.get_register_cursor(elementCounter).read(_message.mdl.all); - elementCounter++; - } - else { - elementCounter = 0; - _modbusRTU._dataHandler.inputRegisters.get_register_cursor(elementCounter).read(_message.mdl.all); - elementCounter++; - } +void Periphery::sendModbusDataToCPU(){ + _message.mdl.all = 0; // TODO delete maybe? + _message.mdh.all = 0; + + WEINBUS::WeinbusTableRegister reg; + reg = modbusRTU._dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); - if(_modbusRTU._dataHandler.inputRegisters.address_range(elementCounter + _modbusRTU.inputRegStartAddr)){ - _modbusRTU._dataHandler.inputRegisters.get_register_cursor(elementCounter).read(_message.mdh.all); - elementCounter++; + if(modbusRTU._dataHandler.outputRegisters.address_range(reg.get_address())){ + _message.mdl.all = reg.get_address(); + reg.read(_message.mdh.all); + + _modbusRegCounter++; } else { - elementCounter = 0; - _modbusRTU._dataHandler.inputRegisters.get_register_cursor(elementCounter).read(_message.mdh.all); - elementCounter++; + _modbusRegCounter = 0; + reg = modbusRTU._dataHandler.outputRegisters.get_register_cursor(_modbusRegCounter); + + _message.mdl.all = reg.get_address(); + reg.read(_message.mdh.all); + + _modbusRegCounter++; } _canb.transmitMsg(canSpace::MODBUS_DATA_COMM_TO_CPU_MBOX, _message); } - - -// void Periphery::test_init_hmi_buffers() -// { -// // -// // hmi writeable registers -// _ASUTP.inputRegisters.set(WEINBUS::INPUTREGISTERS, 400); -// _ASUTP.inputRegisters.add( 0, &test_hmi_float_reg_400.f); -// _ASUTP.inputRegisters.add( 1, &(float&)test_hmi_float_reg_401.f); -// _ASUTP.inputRegisters.add( 2, &(float&)test_hmi_float_reg_402.f); -// _ASUTP.inputRegisters.add( 3, &(float&)test_hmi_float_reg_403.f); -// _ASUTP.inputRegisters.add( 4, &(float&)test_hmi_float_reg_404.f); -// // -// // hmi readable registers -// _ASUTP.outputRegisters.set(WEINBUS::OUTPUTREGISTERS, 400); -// _ASUTP.outputRegisters.add( 0 , &(float&)test_hmi_float_reg_400.f); -// _ASUTP.outputRegisters.add( 1, &(float&)test_hmi_float_reg_401.f); -// _ASUTP.outputRegisters.add( 2, &(float&)test_hmi_float_reg_402.f); -// _ASUTP.outputRegisters.add( 3, &(float&)test_hmi_float_reg_403.f); -// _ASUTP.outputRegisters.add( 4, &(float&)test_hmi_float_reg_404.f); -// // -// }// - -// void Periphery::addInputRegFloat(uint16_t addr, float& param){ -// // if(_ASUTP.inputRegisters.address_range(addr)){ -// // return; -// // } -// _ASUTP.inputRegisters.add( addr, ¶m); -// _ASUTP.outputRegisters.add( addr, ¶m); -// } - -// void Periphery::modbusExecute(){ -// if(_modbusPort.compare_state(MODBUSRTU::BREAK)) -// { -// _modbusPort.port_reset(); -// // -// } -// else -// { -// _modbusPort.execute(); -// _ASUTP.execute(); -// // -// }//if else -// } - - -// void Periphery::setModbusBuffers(){ -// _modbusPort.setRXBuffer((uint16_t*)_ASUTP.rxStack, &_ASUTP.rxLength); -// _modbusPort.setTXBuffer((uint16_t*)_ASUTP.txStack, &_ASUTP.txLength); -// } diff --git a/Periphery.h b/Periphery.h index 437fe1b..d36ac4a 100644 --- a/Periphery.h +++ b/Periphery.h @@ -13,16 +13,6 @@ #include "DSP28335/SCIBase.h" #include "DSP28335/SCIB.h" -// #include "MODBUSRTU/ModbusRTUCRC.h" -// #include "MODBUSRTU/ModbusRTUDefines.h" -// #include "MODBUSRTU/ModbusRTUTransceiver.h" -// #include "MODBUSRTU/ModbusRTUVariant.h" -// #include "MODBUSRTU/ModbusRTUTransceiverBase.h" - -// #include "DSP28335/MeasureTimeInterval.h" - -// #include "WEINBUS/HeaderWeinbus.h" - #include "ModbusRTU.h" @@ -43,14 +33,8 @@ public: bool isModbusInit() const; void receiveModbusParameters(); - void processExternalModbus(); // TODO + void sendModbusDataToCPU(); void processCPUModbus(); // TODO - // void test_init_hmi_buffers(); - // void setModbusBuffers(); - // void addInputRegFloat(uint16_t addr, float& param); - // void modbusExecute(); - - MODBUSRTU::ModbusRTU _modbusRTU; private: canSpace::CAN _canb; @@ -59,30 +43,13 @@ private: DSP28335::SCIB _scib; - // MODBUSRTU::ModbusRTUTransceiverSetup _modbusSetup; - // MODBUSRTU::ModbusRTUTransceiverConfiguration _modbusConfiguration; - // MODBUSRTU::ModbusRTUCRC _crc; - // DSP28335::MeasureTimeInterval _intervalMeasure; - // MODBUSRTU::ModbusRTUTransceiver _modbusPort; - - // WEINBUS::WeinbusSlave _ASUTP; - SoftwareVersion _softVersion; canSpace::CANMessage _message; bool _modbusInitFlag; + uint16_t _modbusRegCounter; - Uint16 tempIn; - Uint16 tempOut; - uint16_t elementCounter; - uint32_t test; - - // // Registers to testing HMI interface - // WEINBUS::REGISTER_32 test_hmi_float_reg_400; - // WEINBUS::REGISTER_32 test_hmi_float_reg_401; - // WEINBUS::REGISTER_32 test_hmi_float_reg_402; - // WEINBUS::REGISTER_32 test_hmi_float_reg_403; - // WEINBUS::REGISTER_32 test_hmi_float_reg_404; - // //<> +public: + MODBUSRTU::ModbusRTU modbusRTU; }; diff --git a/main2.cpp b/main2.cpp index 0807f28..628c5eb 100644 --- a/main2.cpp +++ b/main2.cpp @@ -117,7 +117,7 @@ void main() PieCtrlRegs.PIEIER9.bit.INTx8 = 1; periphery.config(); - periphery._modbusRTU.test_init_hmi_buffers(); + periphery.modbusRTU.test_init_hmi_buffers(); //---------------------------------------------------------------------------------------- // SCIbSetup.config.baudrate = SCIB_BAUDRATE_DEFAULT; @@ -195,19 +195,7 @@ void idle_loop() // MODBUS RTU HMI Service // if (periphery.isModbusInit()){ - periphery._modbusRTU.execute(); - // periphery.modbusExecute(); - // if(modbus_port.compare_state(MODBUSRTU::BREAK)) - // { - // modbus_port.port_reset(); - // // - // } - // else - // { - // modbus_port.execute(); - // hmi.execute(); - // // - // }//if else + periphery.modbusRTU.execute(); } //<> }//end while @@ -218,7 +206,7 @@ void idle_loop() interrupt void cpu_timer0_isr(void) { periphery.processDigitalOutput(); - periphery.processExternalModbus(); + periphery.sendModbusDataToCPU(); PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; }//end