Giter Site home page Giter Site logo

ancord-m / water-prepare-system Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 36 KB

The main aim of this project is to model a work of a real water prepare system. It consists of two barrels, each has two floating switchers. A controller monitors the switchers and decides which one of four electromechanical ball valves to open. In this way I've decided to write a firmware for Arduino controller and to try a little TDD practice.

Java 67.34% Arduino 10.34% C++ 16.02% C 6.30%

water-prepare-system's Introduction

Описание работы системы

Система предварительной водоподготовки представляет собой две 200л бочки, которые работают поочереди. Главная цель системы заключается в обеспечении достаточно длительного (больше двух часов) контактного взаимодйествия воды с гипохлоридом натрия, чтобы окислить все органические и неорганические вещества, удалить сероводород и аммиак.

Каждая из двух бочек обвязана двумя трубами с входным и выходным моторизованными шаровыми кранами. В каждой бочке находится два поплавковых датчика: полного заполнения и полного опустошения. Помимо этого, каждая бочка оснащена поплавковым выключателем, задача которого обесточить входной насос в аварийном случае отказа контроллера/кранов для предотвращения затопления помещения.

В основном - рабочем - режиме оба ВХОДНЫХ крана закрыты. У одной из бочек ВЫХОДНОЙ кран открыт, у другой закрыт. Выходной насос качает воду из бочки. При откачке сначала сработает верхний поплавковый датчик. Датчик слеп, он всего лишь говорит об отсутсвии воды, однако, он расположен высоко и вода еще есть. Поэтому этот сигнал игнорируется. По истечении неопределенного времени сработает нижний поплавковый датчик. Бочка оказывается действительно пустой. Сигнал с нижнего поплавкового датчика является триггером переключения бочек, заполнения опустевшей бочки и дозации гипохлорида. Обозначенные режимы активируются и выполняются асинхронно.

Режимы работы системы

  • Инициализация
  • Расход воды (основной)
  • Переключение бочек
  • Заполнение бочек
  • Дозация гипохлорида натрия
  • Промывка колонн
  • Аварийный
  • Промывка колонн

Инициализация

Выполняется при подаче питания на контроллер.

  • опрос датчиков уровня
    • если обе бочки пустые, то:
      • заполнить каждую
      • выполнить дозацию в каждую
      • выставить активную бочку
    • если обе бочки полные, то:
      • узнать, какая активная, ничего не менять
    • если одна полная, вторая расходуется, то:
      • узнать, какая активная, ничего не менять
    • если одна полная, вторая пустая:
      • выполнить переключение бочек
    • если обе расходуются
      • не предусмотрено

Рабочий режим

Основной цикл:

  • периодический опрос датчиков уровня

Во время расхода воды возникнет могут наступить следующие события:

  • опустится верхний поплавковый датчик (цепь замкнется), сигнал игнорируется
  • опустится нижний поплавковый датчик (цепь замкнется), требуется переключение бочек
  • время промывки: запрет на дозацию

Переключение бочек

После получения сигнала с нижнего поплавкового датчика:

  • ВЫХОДНОЙ кран полной бочки открывается
  • ВЫХОДНОЙ кран пустой бочки закрывается
  • запускается режим дозации
  • запускается режим заполнения бочки

Заполнение бочек

  • Контроллер открывает ВХОДНОЙ кран пустой бочки
  • сигнал с нижнего поплавкового датчика игнорируется
  • По сигналу с верхнего поплавкового дачтика (цепь размыкается), ВХОДНОЙ кран закрывается

Дозация гипохлорида

Дозация выполняется при помощи дозирующего насоса только при переключении бочек. Насос получает импульс от контроллера и делает N впрысков на 200л воды. N рассчитывается по формулам, исходя из загрязненности воды.

  • контроллер отправляет ШИМ-сигнал на сервопривод, который наклоняет коромысло к пустой бочке
  • контроллер отправляет импульс на насос, выполняется дозация в нужном объеме

Аварийный

Фаза и ноль силового кабеля входного насоса разрываются поплавковыми выключателями. В рабочем режиме силовая цепь всегда замкнута и насос находится под напряжением. При заклинивании/отказе моторизованных кранов, ошибке контроллера начнеться переполнение. Любому из полпавков достаточно всплыть, чтобы разорвать фазу или ноль и обесточить насос.

Коды состояния системы

В бесконечном цикле микроконтроллера производится регулярный опрос датчиков уровня. Любой датчик может сообщить: есть вода (1) или нет воды (0). Таким образом, можно интерпретировать сигналы с датчиков как биты. Поскольку датчиков всего четыре, а в байте 8 бит, то они будут складываться в младшие биты. Выбранная схема записи состояния:

  • НП1_ВП1_НП2_ВП2 где НП - нижний поплавок, ВП - верхний поплавок, 1,2 - номера бочек Например, первая бочка расходуется, вторая полная. Тогда с датчиков будет снято 1011. Если записать их как биты, то будет 00001011, или 0x0B, или 11.

Возможны следующие состояния: Требуют действия: Bin - Dec - HEX 0000 - 0 - 0x00: воды нет вообще, поочередное заполнение 0011 - 3 - 0x03: переключение 1100 - 12 - 0x0C: переключение 1111 - 15 - 0x0F: бочки заполнены, открыть нужный OUT кран, закрыть IN кран

Промежуточные неопределённые, не требуют действия: Bin - Dec - HEX 1011 - 11 - 0x0B: вторая готова, первая расходуется или заполняется 1110 - 14 - 0x0E: первая готова, вторая расходуется или заполняется 1010 - 10 - 0x0A: активный расход или заполнение обеих бочек 0010 - 2 - 0x02: заполнение пустой системы, заклинило IN кран 1000 - 8 - 0x08: или это краткий миг при переключении при промывке

Невозможные состояния (могут рассматриваться как аварийные): Bin - Dec - HEX 0001 - 1 - 0x01 0100 - 4 - 0x04 0101 - 5 - 0x05 0110 - 6 - 0x06 0111 - 7 - 0x07 1001 - 9 - 0x09 1101 - 13 - 0x0D Тем не менее, несмотря на то, что верхний поплавок действительно не может подняться раньше нижнего поплавка, не исключены случаи залипания контактов.

water-prepare-system's People

Contributors

ancord-m avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.