// Algorytm dwupompowej stacji ścieków
void Timer1s_Handler(void) {
// Odczyt poziomu ze stacji hydrostatycznej 4-20mA (IR 10)
uint16_t poziom_cm = *modbus.input_registers[IR_ANALOG1_INZ];
uint16_t prog_zalaczenia = *modbus.holding_registers[REG_PROG_P1];
// Zabezpieczenie przed suchobiegiem
if (poziom_cm < POZIOM_SUCHOBIEG) {
TurnOFF_Output(OUT_POMPA_1);
TurnOFF_Output(OUT_POMPA_2);
TurnOnBuzzerTime(500); // 500ms alarm
return;
}
// Automatyczne załączanie pompy wiodącej
if (poziom_cm >= prog_zalaczenia && !pompa_pracuje) {
if (ostatnio_pracowala == 1) {
TurnON_Output(OUT_POMPA_2);
ostatnio_pracowala = 2;
} else {
TurnON_Output(OUT_POMPA_1);
ostatnio_pracowala = 1;
}
}
}
// Konfiguracja startowa sterownika neXTster100
void Setup(void) {
// P0: Dedykowany do modemu GPRS/GSM (115200 8E1)
UartConfig(P0, 115200, UART_PARITY_EVEN, UART_STOPBITS_1);
// P1: Panel dotykowy HMI DWIN (19200 8N1)
UartConfig(P1, 19200, UART_PARITY_NONE, UART_STOPBITS_1);
// P2: Zapasowy port RS232 (19200 8N1)
UartConfig(P2, 19200, UART_PARITY_NONE, UART_STOPBITS_1);
// P3: Magistrala RS485 Modbus RTU (19200 8N1)
UartConfig(P3, 19200, UART_PARITY_NONE, UART_STOPBITS_1);
// Ustawienie domyślnego adresu Modbus ID: 5
ModbusSetDeviceId(P0, MODBUS_ID_DEFAULT);
ModbusSetDeviceId(P1, MODBUS_ID_DEFAULT);
ModbusSetDeviceId(P2, MODBUS_ID_DEFAULT);
ModbusSetDeviceId(P3, MODBUS_ID_DEFAULT);
}
// Cykliczna aktualizacja parametrów telemetrycznych
void Timer100ms_Handler(void) {
// Przepisanie stanu 16 wejść cyfrowych do rejestru Modbus IR 0
*modbus.input_registers[IR_INPUTS] = OdczytajWejsciaCyfrowe();
// Przepisanie stanu 16 wyjść cyfrowych do IR 1
*modbus.input_registers[IR_OUTPUTS] = PobierzStanWyjsc();
// Rejestracja czujników środowiskowych szafy sterowniczej
*modbus.input_registers[IR_TEMP] = PobierzTempWewn();
*modbus.input_registers[IR_PRESSURE] = PobierzCisnienieAtmo();
*modbus.input_registers[IR_HUMINIDITY] = PobierzWilgotnosc();
}