Отговори на тема  [ 209 мнения ]  Отиди на страница Предишна  1 ... 7, 8, 9, 10, 11, 12, 13, 14  Следваща
PLC 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение Re: PLC
miro_atc написа:
...Ще дойде време и без моята помощ ще разбереш що за глупост е емулатора ти без HAL.

Ако правилно съм разбрал магьосникът не иска HAL. Това, което прави е самият "HAL" - user-ът си пише на каквото иска и няма пряк достъп до желязото.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Нед Юли 06, 2025 12:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
Цитат:
user-ът си пише на каквото иска

на нативен скриптов език - С, С++ (Arduino), Rust ... етц
без да се интересува какво има в черната кутийка
( освен API-то и документацията на производителя на "кутийката" )

пълна аналогия на Java2ME, но нативен скрипт
( Python2ME ще стане по-бавно и от microPython )

а реално искам да тествам - кое какво как ... нищо повече

_________________
main[-1u]={1};


Нед Юли 06, 2025 12:13 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 06, 2018 5:18 pm
Мнения: 1750
Мнение Re: PLC
HAL-хабер си нямате от PLC, това, което плаши чорбаджиите е зависимостта им от тесни електронни специалисти - такива, които разбират само от Allen-Bradley или от Siemens , As-i и всякакви останали знайни и незнайни производители и стандарти за PLC и SCADA, тук, в Англия един PLC специалист с познания по механика и електротехника, такъв, който може да поддържа цялата контролна система взима над 70-80000 паунда. Аз не виждам смисъл от създаването на още един стандарт при условие че има дори отворени такива - OpenPLC както и OpenSCADA, ако аз трябва да изграждам такава система бих се спрял на тези, бях чел някъде преди много време че дори Фолксваген смята да мине на една от двете, не си спомням точно коя. Уизарде - според мен си губиш времето, най-много да преоткриеш наново колелото.

_________________
“Intelligence is the ability to adapt to change.” Stephen Hawking


Нед Юли 06, 2025 1:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: PLC
Жоре, в тоя форум повечето сме дърти за съжаление, но пък с много десетилетия опит в областта.

Колко хора мислиш, че ще използват думичката "скрипт", когато иде реч за Ц/Ц++ или rust?

Колко хора знаят какво означава думичката "kernel"? И че това е оная част от OS или RTOS, която реализира многозадачност. Понякога ако има драйверна система, тя може да е част от кърнела и в тоя смисъл да се твърди, че кърнела се грижи и за HAL-а. Но в нашата област с микроконтроли повечето RTOS нямат драйверни системи и кърнелите са просто таск шедулъри.
Който не ми вярва може да пита чичко Гугъл или някой от многото идиоти, че кърнел означава това и само това.
В постовете дотук не е ставало дума дали ще има мнозадачност и нужда от кърнел. Без такова уточнение, използването на тая думичка е меко казано неудачно (за да не бъда груб).




syscop написа:
miro_atc написа:
...Ще дойде време и без моята помощ ще разбереш що за глупост е емулатора ти без HAL.

Ако правилно съм разбрал магьосникът не иска HAL. Това, което прави е самият "HAL" - user-ът си пише на каквото иска и няма пряк достъп до желязото.


Представи си следната ситуация:
1) пишеш да кажем плц логика на ц/ц++
2) За достъп до хардуера нямаш HAL, затова ползваш някакво API, да речем базирано на ESPRIF.
3) компилираш си кода с arm-elf-gcc
4) пускаш го след това да се изпълнява на ESP32 използвайки емулатора на Жорето.

Яко, нали?


Нед Юли 06, 2025 1:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
Представи си следната ситуация:
1. купуваш "кутиика" да речем PLC
2. четеш документацията на кутийката - там пише - инсталирай еди какво си
- или Инсталираш VSCode/PlatformIO - клик Install ( комбинацията работи на всичкото комп )
- клик Нов проект, клик избор на кутиийката
3. пишеш релейна Логиката на C - там е проста логика and, or, xor
( дори и API може да няма ... или SendData("22.0") до облака )
- клик Compile
- клик Upload
- клик Monitor - гледаш лога

някъде да използвах RTOS, HAL, arm-elf-gcc, ESPRIF, ESP32 ... в описанието ???

Bai Ui, само си представи колко е инвестицията на Allen-Bradley или Siemens
само за инструментите ( софтуера който обслужва кутийката )
та тесния IT специалист да си напише Логиката

_________________
main[-1u]={1};


Нед Юли 06, 2025 1:56 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение Re: PLC
Не знам колко е тяхната инвестиция, но сименското безумие се инсталира половин ден, и накрая хвърляш боб дали ще работи. Аз не съм експерт, но това ми е впечатлението от инсталацията на една среда с която работи експерт....аз само докато инсталирах се изприщих, а как всичко се влачи няма да говорим.


Нед Юли 06, 2025 2:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
пример за PLC логика ( генерирана от AI че ме мързи да пиша ... даже много сложно генерира примера )
някъде да виждате HAL, RTOS, някаква информация за хардуера на "кутийката"

Код:
#include <stdio.h> // За printf

// Дефиниции за по-лесна четимост
#define INPUT_0  (1 << 0) // Бит 0
#define INPUT_1  (1 << 1) // Бит 1
#define INPUT_2  (1 << 2) // Бит 2
#define INPUT_3  (1 << 3) // Бит 3
#define INPUT_4  (1 << 4) // Бит 4
#define INPUT_5  (1 << 5) // Бит 5
#define INPUT_6  (1 << 6) // Бит 6
#define INPUT_7  (1 << 7) // Бит 7

#define OUTPUT_0 (1 << 0) // Бит 0
#define OUTPUT_1 (1 << 1) // Бит 1
#define OUTPUT_2 (1 << 2) // Бит 2

// Глобални променливи за състоянието на входовете и изходите
unsigned char currentInputs = 0;
unsigned char currentOutputs = 0;

// Функция за симулиране четене на вход (в реална система ще чете от GPIO регистър)
void setInput(unsigned char inputMask) {
    currentInputs |= inputMask; // Установява бита на съответния вход
}

// Функция за симулиране нулиране на вход (в реална система няма да е нужна, освен ако не е бутон)
void clearInput(unsigned char inputMask) {
    currentInputs &= ~inputMask; // Изчиства бита на съответния вход
}

// Функция за PLC логиката
void plcLogicCycle() {
    // Нулираме всички изходи преди да ги установим отново
    // currentOutputs = 0; // Може да се направи, ако искаме всички изходи да са импулсни, но по-често ги управляваме инкрементално

    unsigned char newOutputs = 0; // Временно състояние за новите изходи

    // --- Логика на PLC ---
    // Пример 1: Ако Input_0 е HIGH, Output_0 е HIGH
    if (currentInputs & INPUT_0) {
        newOutputs |= OUTPUT_0;
    }

    // Пример 2: Ако Input_1 е HIGH И Input_2 е HIGH, Output_1 е HIGH
    if ((currentInputs & INPUT_1) && (currentInputs & INPUT_2)) {
        newOutputs |= OUTPUT_1;
    }

    // Пример 3: Ако Input_3 е HIGH ИЛИ Input_4 е HIGH, Output_2 е HIGH
    // Но Output_2 се изключва, ако Input_5 е HIGH (защита/авария)
    if ((currentInputs & INPUT_3) || (currentInputs & INPUT_4)) {
        if (!(currentInputs & INPUT_5)) { // Ако Input_5 НЕ е HIGH
            newOutputs |= OUTPUT_2;
        }
    }

    // Пример 4: Output_0 се изключва, ако Input_6 е HIGH
    // Това може да се добави към предишната логика за Output_0
    if (currentInputs & INPUT_6) {
        newOutputs &= ~OUTPUT_0; // Изключва Output_0
    }

    // --- Край на логиката ---

    // Актуализираме реалните изходи
    currentOutputs = newOutputs;
}

// Функция за симулиране на запис към изходите
void writeOutputs() {
    printf("Текущи входове (бинарно): ");
    for (int i = 7; i >= 0; i--) {
        printf("%d", (currentInputs >> i) & 1);
    }
    printf("\n");

    printf("Текущи изходи (бинарно): ");
    for (int i = 7; i >= 0; i--) {
        printf("%d", (currentOutputs >> i) & 1);
    }
    printf("\n");

    printf("Състояние на изходите: ");
    if (currentOutputs & OUTPUT_0) printf("Output_0: ON, "); else printf("Output_0: OFF, ");
    if (currentOutputs & OUTPUT_1) printf("Output_1: ON, "); else printf("Output_1: OFF, ");
    if (currentOutputs & OUTPUT_2) printf("Output_2: ON\n"); else printf("Output_2: OFF\n");
    printf("---\n");
}

int main() {
    printf("Симулация на PLC логика на C:\n");

    // Цикъл 1: Initial state
    printf("Цикъл 1: Първоначално състояние\n");
    plcLogicCycle();
    writeOutputs();

    // Цикъл 2: Input_0 ON
    printf("Цикъл 2: Включваме Input_0\n");
    setInput(INPUT_0);
    plcLogicCycle();
    writeOutputs();

    // Цикъл 3: Input_0 OFF, Input_1 ON, Input_2 ON
    printf("Цикъл 3: Изключваме Input_0, включваме Input_1 и Input_2\n");
    clearInput(INPUT_0);
    setInput(INPUT_1 | INPUT_2);
    plcLogicCycle();
    writeOutputs();

    // Цикъл 4: Input_3 ON
    printf("Цикъл 4: Включваме Input_3\n");
    setInput(INPUT_3);
    plcLogicCycle();
    writeOutputs();

    // Цикъл 5: Input_3 ON, Input_5 ON (авария за Output_2)
    printf("Цикъл 5: Input_3 ON, Input_5 ON (Output_2 трябва да се изключи)\n");
    setInput(INPUT_3 | INPUT_5); // Input_3 вече е ON, добавяме Input_5
    plcLogicCycle();
    writeOutputs();

    // Цикъл 6: Input_6 ON (изключва Output_0, ако е бил включен)
    printf("Цикъл 6: Включваме Input_6 (изключва Output_0)\n");
    setInput(INPUT_0); // Включваме Input_0, за да видим ефекта на Input_6
    setInput(INPUT_6);
    plcLogicCycle();
    writeOutputs();

    return 0;
}

_________________
main[-1u]={1};


Нед Юли 06, 2025 2:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
или любимия чат на IT специалистите
та, някъде да виждате HAL, RTOS, някаква информация за хардуера на "кутийката"

Код:
#include <stdint.h>
#include <stdbool.h>

// 8 цифрови входа
bool IN[8];

// 3 цифрови изхода
bool OUT[3];

// Основна логика
void plc_cycle(void) {
    // OUT[0] = IN[0] AND IN[1]
    OUT[0] = IN[0] && IN[1];

    // OUT[1] = (брой активни входове > 4)
    int active_count = 0;
    for (int i = 0; i < 8; ++i) {
        if (IN[i]) active_count++;
    }
    OUT[1] = (active_count > 4);

    // OUT[2] = (IN[2] OR IN[3]) AND NOT IN[4]
    OUT[2] = (IN[2] || IN[3]) && !IN[4];
}


_________________
main[-1u]={1};


Нед Юли 06, 2025 2:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: PLC
TheWizard написа:
пример за PLC логика ( генерирана от AI че ме мързи да пиша ... даже много сложно генерира примера )
някъде да виждате HAL, RTOS, някаква информация за хардуера на "кутийката"


Ако наистина разбираше смисъла на тия понятия нямаше да задаваш подобни въпроси.

Ако този пример може без модификация да го подкараш на различни платформи, това означава че имаш HAL.
Ако за различните платформи ще ползваш различни функции за достъп - нямаш HAL.
Аз няма как да знам кое от двете е, защото тая информация я няма в поста ти, нито пък някога си уточнявал ще ползваш или няма HAL.
Но факта, че се опитваш да ме убедиш, че няма значение кой от двата варианта е, означава че между нас има огромно разминаване...


Нед Юли 06, 2025 2:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
Миро, кое не разбра - ( без значение дали е PLC или LTE модул )

Софтуера на клиента не трябва да се изпълнява директно на хардуера
( клиента не трябва да бърника по кернела и MCU-то )
Софтуера на клиента се пише на C, C++


Цитат:
Ако този пример може без модификация да го подкараш на различни платформи, това означава че имаш HAL

амии има си :D ... дали бареметал, дали + HAL, дали ОС ... но клиента не го интересува как и къде се върти неговата апликация - за него е важно какви неща може да използва от тази кутийка за да си свърши работата

_________________
main[-1u]={1};


Нед Юли 06, 2025 2:50 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: PLC
Е аз 100 пъти повторих - не разбирам ще ползваш HAL или не?

Ако не си решил - ОК, ама да го дъвчем това в 100 поста е тъпо.

Аз твърдя, че нямаш избор. Посочих достатъчно аргументи. Въпросът е кога ти ще го осъзнаеш.


Нед Юли 06, 2025 2:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
това е проблем на производителя на кутийката (firmware) ... PLC
да си организира кернела както иска - дали бареметал, HAL, дали Ардуино или OS
в момента това не ме вълнува

правя емулатор на байткод, който е получен от С/C++ код ( клиентска апликация )
и за да не пиша нов байткод и компилатор за него използвам машинния код от RISC-V ядро
( първия опит беше с ARMv7-M, но RISC по-лесно се декодира )

C2ME аналогия на J2ME - същото ама със С/C++

_________________
main[-1u]={1};


Нед Юли 06, 2025 3:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11265
Местоположение: Добрич
Мнение Re: PLC
TheWizard написа:
това е проблем на производителя на кутийката (firmware) ... PLC
да си организира кернела както иска - дали бареметал, HAL, дали Ардуино или OS
в момента това не ме вълнува


А за чий бяха всички тия приказки за мултиплатформеност, за различни ядра, сравнения с андроиди, жаби, гущери и змии?

Казваш теб тия неща не те вълнуват, клиентът да си навира кутийчиците сам отзад ...


Нед Юли 06, 2025 3:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
ето ти въпрос: как да икономисам 16к код ( и скорост ) от клиентския printf
( нали си писал емулатори на ядра )

printf съществува в кернела - умувам за API мост за printf от виртуален "пясъчник" към кернела

_________________
main[-1u]={1};


Нед Юли 06, 2025 3:37 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: PLC
няма да стане - calling convention са различни, както и стековете също

_________________
main[-1u]={1};


Нед Юли 06, 2025 4:00 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 209 мнения ]  Отиди на страница Предишна  1 ... 7, 8, 9, 10, 11, 12, 13, 14  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни