2.4 KiB

IndustrialTracker

Databse model

Device

Main device object used as base for dependency injection

  • id - number
  • name - string
  • type - (Relation)->DeviceType
  • enabled - boolean

DeviceType

Device type definition

  • id - number
  • name - string

Reading

Reading object used to store data from Device

  • id - number
  • device - (Relation)->Device
  • reading_time - date
  • energy - number
  • air - number
  • running - boolean
  • ... place for more data eventually

PLC

PLC object used to store configuration of PLC

  • id - number
  • ip - string
  • port - number
  • db_number - number
  • energy_offset - number
  • air_offset - number
  • running_offset - number
  • ... place for more offsets definition

PAC

PAC object used to store configuration of PAC

  • id - number
  • ip - string
  • port - number ... something I missed

Scheduler

  • id - number
  • name - string
  • interval_seconds - number
  • next_run - date ... something I missed

Workflow

Main process

main.py

Is infinite loop that:

  • checks scheduler settings from database (Scheduler)
  • checks if it's time to run scheduler
  • if yes, runs scheduler then updates next_run date following schema date.now() + interval_seconds

Scheduler process/service

scheduler_service.py

When scheduler is run, it:

  • gets all devices from database (Device)
  • for each device that is enable, at first, check if it is accessible (by pinging)
  • if yes, then it gets data from device (via read_service) and saves it to database (Reading)

Read process/service

read_service.py

Read process should be unified for all devices and handled by dependency injection. Abstract class for dependency injection is declared in readers/device_reader.py.

Each device type has it's own reader class that implements pinging function and reading function.

  • PLC reader is implemented in readers/plc_reader.py
  • PAC reader is implemented in readers/pac_reader.py

PLC reader

Utilizes python-snap7 library to communicate with PLC.

PAC reader

TODO: PAC reader is not implemented yet.

Utilizes --- library to communicate with PAC.

Database process/service

database_service.py

Singleton class that implements all database operations.

Most use cases should be in scheduler process where readed data are going to be saved to database.