Roman (Пользователь)
Fresh Boarder
Постов: 19
|
Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
Допоможіть будьлска в реалізації регістра з подвійним управлінням.
Суть задачі.
Необхідно для початку процесу дозування давати по modbus дозвіл на старт.
Тобто занести в один із яких небудь регітрів 1. Після випорожнення ємності
система повинна програмно з МІК-51 зніти цей дозвіл.
Коли якийсь із параметрів стоїть як "зв'язаний" то параметр недоступний для змін зовні, а коли
галочку забрати тоді регістром неможливо керувати із середини.
Чи можна цей випадок реалізувати іншим чином.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Lukas (Модератор)
Модератор
Постов: 213
|
RE: Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
Одним із варіантів реалізації алгоритму являється використання блоку Trig(25), команду на старт подавати з блоку dSet(83) на перший вхід dSET блоку Trig(25), а команду про завершення процесу на другий вхід dRST. Варто врахувати, що команда з верхнього рівня по Modbus RTU повинна подаватись по принципу кнопки без фіксації (короткочасне подання «1»), Приклад програми в прикладеному файлі. Прикрепленный файл: Имя файла: test_594.zipРазмер файла: 857
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Roman (Пользователь)
Fresh Boarder
Постов: 19
|
RE: Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
команду на старт подавати з блоку dSet(83)
А як зняти команду "1" з блоку dSet(83) - тобто обнулити.
Програмно відслідковувати і бнуляти блок після виконання я не хочу.
Тут потрібно буде ставити затримку на 1 цикл програми. - це раз.
Програма повинна мати живучість - тобто при зависанні софта на
компі процес повинен продовжуватись безперервно.
Стосовно одноразової відправки команд - то я так і роблю.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Lukas (Модератор)
Модератор
Постов: 213
|
RE: Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
Якщо записати короткочасно в блок dSet(83) "1" і після цього записати "0" (принцип кнопки без фіксації), то на виході блоку отримаємо короткочасний імпульс, який подається на блок Trig(25), що запамятає його, і буде тримати цю "1" аж до появи сигналу на 2-му його вході (dRST), що відповідатиме завершенню процесу (одного циклу). Таким чином, процес буде тривати аж до закінчення випорожнення ємності і будь-які збої в програмному забезпеченні верхнього рівня ніяк на це не вплинуть.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Roman (Пользователь)
Fresh Boarder
Постов: 19
|
RE: Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
Впринципі я так і роблю, але хотів якось по іншому.
Така метода досить накладна.
Тут потрібно в мою програму (не плутати з програмою мікроконтроллера) добавляти
таймери, а якщо команд багато - таймерів теж багато. Пропадає принцип цілістності програми
тепер алгоритм роззосереджений між різними процесорами...
-
Було б добре ввести (якщо це можливо з технічної сторони) такий блок в МІК-51.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Lukas (Модератор)
Модератор
Постов: 213
|
RE: Регістр з подвійним управлінням 13 г., 1 мес. назад
|
|
Якщо відштовхуватись від верхнього рівня управління, то типовий алгоритм запису значення в регістр приладу є наступним:
1. Якщо комунікаційний порт ще не відкритий – відкрити його (API функція CreateFile).
2. Згенерувати повідомлення згідно правил протоколу ModBus RTU.
3. Записати повідомлення в відкритий порт (API функція WriteFile).
4. Зробити незначну затримку в часі (наприклад, 10 мсек)
5. Прочитати повідомлення-підтвердження з порта (API функція ReadFile).
Якщо необхідно після цього записати інше повідомлення (згідно вашої задачі – скинути попередньо записане значення), потрібно, виконавши затримку, повторити пункти 2…5, але вже з іншим значенням.
Коли використовується синхронний режим передачі даних через послідовний порт, використовувати додаткові таймери для відслідковування, чи записалось/зчиталось значення з регістру приладу, немає потреби – вихід з відповідної функції (WriteFile, ReadFile), і відповідно, перехід до виконання наступної команди програми буде виконаний тільки по завершенні пересилки даних (або по спрацюванню відповідного таймауту, заданого в структурі COMMTIMEOUTS під час налаштування порта). Як результат – програму верхнього рівня не потрібно перевантажувати і ускладнювати лишніми таймерами.
Затримку в програмному коді можна виконати з допомогою API функції Sleep.
Також потрібно незабувати про систематичну обробку черги повідомлень (API функції PeekMessage, TranslateMessage і DispatchMessage), інакше програма буде тільки тим і зайнята, що працюватиме з портом.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Roman (Пользователь)
Fresh Boarder
Постов: 19
|
RE: Регістр з подвійним управлінням 13 г. назад
|
|
QUOTE: Якщо необхідно після цього записати інше повідомлення (згідно вашої задачі – скинути попередньо записане значення), потрібно, виконавши затримку, повторити пункти 2…5, але вже з іншим значенням.
-
Звичайно можна так робити, але команди повинні іти за принципом - зробив і забув. Проблема з"являється коли скидання значення виконується через більший час - скажімо через хвилину. В таких випадках з"являється подвійна реалізація алгоритму, особливо небезпечно на системах із підвищеною безпекою неперервності процесу (у випадку зависання комп"ютера немає кому скидати значення).
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
Lukas (Модератор)
Модератор
Постов: 213
|
RE: Регістр з подвійним управлінням 13 г. назад
|
|
1. Люба команда з верхнього рівня до вторинних приладів (регуляторів, контролерів і т.д.) на робочому об’єкті повинна виконуватись за принципом: "зробив (відправив) – перевірив правильність виконання – забув".
2. Якщо передбачається будь-яка ненадійність функціонування верхнього рівня в ієрархії АСУТП (а так воно і є, оскільки 100% надійних елементів не буває), коли, умовно, команда «пуск» - була відправлена на контролер, а наступна команда «сброс» - по тим чи іншим причинам – ні, програма, складена і записана в контролер, повинна враховувати такий перебіг подій і, або виконувати примусовий «сброс» самостійно, або, згідно регламенту установки, виконувати необхідну наперед визначену послідовність дій (сигналізація, аварійна зупинка об’єкту тощо). Як саме це реалізувати на рівні контролера згідно з Вашою задачею, було розглянуто в постах 713 і #718.
3. На технологічних об’єктах для особливо важливих контурів керування практикується повне апаратне резервування (умовно: давач – контролер – виконавчий механізм).
4. Система АСУТП вибухонебезпечних обєктів складається з двох незалежних систем: РСУ (розподілена система управління) і ПАЗ (система протиаварійного захисту). Одна – керує, інша – контролює.
|
|
|
|
|
Для добавления сообщений, Вы должны зарегистрироваться или авторизоваться.
|
|