Ejemplo n.º 1
0
void modbus_cycle()
{
  // Wenn nichts mehr zu senden und etwas im Empfangspuffer ist und eine Pause von min 3ms entstanden ist
  // dann Telegramm auswerten
  if (usart_write_len()==0 && usart_read_len()>0 && usart_rx_getdelay()>2)
  { 
    modbus_processSlaveFrame(usart_rx_buffer, usart_read_len());
    // nach der Auswertung Puffer rücksetzen, damit vom Anfang an neu gelesen wird
	  usart_flush();  
  }  
}
Ejemplo n.º 2
0
int main(void) {

	uint8_t oldStatus = 0;

	initSysVars();
	initPorts();

	// we use RS485 here, to go with RS232 just have a look at Modbus_uart.c/.h
	// and use the rs232 init function
	rs485_init(UART_BAUD_SELECT(9600,F_CPU));
	initInterrupts();
	sei();

//	actProfileData[IDX_DW_Debug02] = 2;
	actProfileData[IDX_DW_Debug01] = 101;
	actProfileData[IDX_DW_Debug02] = 102;
	actProfileData[IDX_DW_Debug03] = 103;

	actProfileData[IDX_DW_EncSteps] = 200;
	actProfileData[IDX_DW_EncHyst] = 4;
	setBitValForSysBit(IDX_AB_EncSync, ON);


	for (;;) {


		if (oldStatus != uart0_status.status) {
			oldStatus = uart0_status.status;

			if (uart0_status.status == RS_FrameComplete) {
				if (UART_RxHead) {
					modbus_processSlaveFrame((uint8_t*) UART_RxBuf, UART_RxHead);
				}
				uart_flush();
				uart0_status.status = RS_Wait;
			}
		}

		if (changedBit.cBit != 99) {
			performBitActions();
		}
	}

}