|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 12:42 pm
| Автор |
Съобщение |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
 Re: PLC
Ако правилно съм разбрал магьосникът не иска HAL. Това, което прави е самият "HAL" - user-ът си пише на каквото иска и няма пряк достъп до желязото.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Нед Юли 06, 2025 12:04 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: PLC
на нативен скриптов език - С, С++ (Arduino), Rust ... етц без да се интересува какво има в черната кутийка ( освен API-то и документацията на производителя на "кутийката" ) пълна аналогия на Java2ME, но нативен скрипт ( Python2ME ще стане по-бавно и от microPython ) а реално искам да тествам - кое какво как ... нищо повече
_________________ main[-1u]={1};
|
| Нед Юли 06, 2025 12:13 pm |
|
 |
|
Bai Ui
Ранг: Форумен бог
Регистриран на: Вто Ное 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 |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: PLC
Жоре, в тоя форум повечето сме дърти за съжаление, но пък с много десетилетия опит в областта. Колко хора мислиш, че ще използват думичката "скрипт", когато иде реч за Ц/Ц++ или rust? Колко хора знаят какво означава думичката "kernel"? И че това е оная част от OS или RTOS, която реализира многозадачност. Понякога ако има драйверна система, тя може да е част от кърнела и в тоя смисъл да се твърди, че кърнела се грижи и за HAL-а. Но в нашата област с микроконтроли повечето RTOS нямат драйверни системи и кърнелите са просто таск шедулъри. Който не ми вярва може да пита чичко Гугъл или някой от многото идиоти, че кърнел означава това и само това. В постовете дотук не е ставало дума дали ще има мнозадачност и нужда от кърнел. Без такова уточнение, използването на тая думичка е меко казано неудачно (за да не бъда груб). Представи си следната ситуация: 1) пишеш да кажем плц логика на ц/ц++ 2) За достъп до хардуера нямаш HAL, затова ползваш някакво API, да речем базирано на ESPRIF. 3) компилираш си кода с arm-elf-gcc 4) пускаш го след това да се изпълнява на ESP32 използвайки емулатора на Жорето. Яко, нали?
|
| Нед Юли 06, 2025 1:17 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
 Re: PLC
Не знам колко е тяхната инвестиция, но сименското безумие се инсталира половин ден, и накрая хвърляш боб дали ще работи. Аз не съм експерт, но това ми е впечатлението от инсталацията на една среда с която работи експерт....аз само докато инсталирах се изприщих, а как всичко се влачи няма да говорим.
|
| Нед Юли 06, 2025 2:02 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: PLC
или любимия чат на IT специалистите та, някъде да виждате HAL, RTOS, някаква информация за хардуера на "кутийката"
_________________ main[-1u]={1};
|
| Нед Юли 06, 2025 2:11 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: PLC
Ако наистина разбираше смисъла на тия понятия нямаше да задаваш подобни въпроси. Ако този пример може без модификация да го подкараш на различни платформи, това означава че имаш HAL. Ако за различните платформи ще ползваш различни функции за достъп - нямаш HAL. Аз няма как да знам кое от двете е, защото тая информация я няма в поста ти, нито пък някога си уточнявал ще ползваш или няма HAL. Но факта, че се опитваш да ме убедиш, че няма значение кой от двата варианта е, означава че между нас има огромно разминаване...
|
| Нед Юли 06, 2025 2:39 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: PLC
Миро, кое не разбра - ( без значение дали е PLC или LTE модул ) Софтуера на клиента не трябва да се изпълнява директно на хардуера ( клиента не трябва да бърника по кернела и MCU-то ) Софтуера на клиента се пише на C, C++ амии има си  ... дали бареметал, дали + HAL, дали ОС ... но клиента не го интересува как и къде се върти неговата апликация - за него е важно какви неща може да използва от тази кутийка за да си свърши работата
_________________ main[-1u]={1};
|
| Нед Юли 06, 2025 2:50 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: PLC
Е аз 100 пъти повторих - не разбирам ще ползваш HAL или не?
Ако не си решил - ОК, ама да го дъвчем това в 100 поста е тъпо.
Аз твърдя, че нямаш избор. Посочих достатъчно аргументи. Въпросът е кога ти ще го осъзнаеш.
|
| Нед Юли 06, 2025 2:58 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: PLC
А за чий бяха всички тия приказки за мултиплатформеност, за различни ядра, сравнения с андроиди, жаби, гущери и змии? Казваш теб тия неща не те вълнуват, клиентът да си навира кутийчиците сам отзад ...
|
| Нед Юли 06, 2025 3:31 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: PLC
ето ти въпрос: как да икономисам 16к код ( и скорост ) от клиентския printf ( нали си писал емулатори на ядра )
printf съществува в кернела - умувам за API мост за printf от виртуален "пясъчник" към кернела
_________________ main[-1u]={1};
|
| Нед Юли 06, 2025 3:37 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: PLC
няма да стане - calling convention са различни, както и стековете също
_________________ main[-1u]={1};
|
| Нед Юли 06, 2025 4:00 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|