"Фантики" - это хорошо, структурированно и красиво, но с ними ("фантиками") потом копаться в чужом коде то еще "удовольствие"...
Такие больше всего нравятся:
Clip_2.gif
"Фантики" - это хорошо, структурированно и красиво, но с ними ("фантиками") потом копаться в чужом коде то еще "удовольствие"...
Такие больше всего нравятся:
Clip_2.gif
Последний раз редактировалось Spawn; 07.11.2023 в 10:35.
Не понял юмора. То есть, местным гопникам вместо того, чтобы открыть ОДИН список переменных VarsOP, прочитать там описания, нумерацию и назначение всех полей и битов, удобнее видеть что-то типа
* word1.14
* ipa7.12
* zzbq
* ton1
* rtrig1
Я понимаю, что я эээ.. со свиным рылом в калашный ряд, и что в программировании ПЛК вообще очень мало людей с культурой и стандартами кода (только я и Евгений Кислов, ахаха), но всё же реакции вида "Высмеять всё, что не понятно вместо того, чтобы спросить", я не ожидал.
Ну, дополняю скриншотами.
OP-Links-1.gif OP-Links-2.gif OP-Links-3.gif OP-Links-4.gif
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Cs-Cs, не обращайте внимания на мои "фломастеры", мне красные "вкуснее"...
А с магическими числами в программировании ты(вы) знаком? Это - убийственно плохая практика программирования, когда вместо понятных констант используются сразу подставленные числа, а потом, когда надо это число поменять, его надо везде искать по коду и исправлять, но не перепутать с другим.
Образно, вот написали мы что-то там типа BlaBla.27, а потом почему-то нам надо 27 поменять на 24, которое тоже было использовано в коде в разных местах. Ну, например, какую-то тревогу (для которой был бит), надо вставить именно вот в это место. И дальше нам надо поискать в коде все места с 27, замменить их на 24, но не перепутать эти "новые" 24 со "старыми" 24, которые относятся не к тому. В таких задачах даже полнтекстовый поиск по всему проекту может не помочь.
Чтобы такого не было, правильная практика программирования предлагает выносить всё в константы. Сейчас, к примеру, я достал исходники одного своего проекта на СИ++ из 2003 года (да, 20 лет прошло!), кое-чего там исправляю, и мучаюсь в некоторых местах из-за магических чисел.
Как мудрый камрад, я бы предложил перевести обсуждение вот к чему: как корректно и красиво адресовать битовые маски, если их много. Ведь я сам не нашёл ничего умнее (и это сарказм), чем их просто поименовать и наплодить цифры.
Варианты:
а) Обозвать маски по именам типа BitsAlarmsMain, BitsAlarmsDevices. Но тогда есть риск, что их всё равно не хватит, или что биты тревог будут идти оп последовательно (и панель их не прочитает групповым запросом). Я его отмёл.
б) Накатать вообще какую-то хbтромутную функцию вида GetBit/SetBit, которая будет обращаться к глобальной переменной структуры панели оператора целиком и принимать на входе описание нужного бита в виде адресации НомерDWORD/НомерБИТА, закрученной в структуру и константу. Вот это я бы попробовал.
Тогда код выглядел бы как SetOPBit(AlarmsILCStatusUPS, TRUE), а в "AlarmsILCStatusUPS" было бы описано, что на деле это DWORD номер 4, бит 18ый.
Надо так попробовать, хаха! =)
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Так а имена, разве, не придется менять во всем коде, если у вас что-либо, где-либо "съехало"? Например, Vhod, который был нулевым, на Vihod, который им стал, а иначе всё поименование теряет смысл...Образно, вот написали мы что-то там типа BlaBla.27, а потом почему-то нам надо 27 поменять на 24, которое тоже было использовано в коде в разных местах. Ну, например, какую-то тревогу (для которой был бит), надо вставить именно вот в это место. И дальше нам надо поискать в коде все места с 27, замменить их на 24, но не перепутать эти "новые" 24 со "старыми" 24, которые относятся не к тому. В таких задачах даже полнотекстовый поиск по всему проекту может не помочь.
По мне так "те же яйца, только в профиль", да, опрятнее ну и смысла в имени больше (если оно адекватное, а не SB1, SB2, SB3 и т.д.) чем в числе (том же нуле) и не более того.
Возможно, не спорю. Я самоучка (в плане программирования, только не нужно в меня "помидорами кидать", жрать варить у домашней плиты тоже в университете не обучаются...), частенько "копаюсь" в чужих кодах, понравившиеся и логически обоснованные практики беру "на вооружение".Чтобы такого не было, правильная практика программирования предлагает выносить всё в константы.
Последний раз редактировалось Spawn; 09.11.2023 в 09:28.
С формированием прямой адресации области памяти Slave-переменных вполне справляется Excel с несложными формулами, потом достаточно вводить тип, имя и при необходимости начальное значение и комментарий.
изображение_2023-11-09_131153339.png
После остаётся только скопировать полученный список в глобальные переменные.
Если устройство-мастер поддерживает какой-либо импорт переменных, то на основе этого файла можно подготовить и список для импорта, не говоря уж о простой карте регистров
SpawnХм. Смотри. Ежели речь идёт о случае, когда битов нам хватит, но надо в середину что-то воткнуть - то мы меняем константы.Так а имена, разве, не придется менять во всем коде, если у вас что-либо, где-либо "съехало"?
Например, БЫЛО:
AlarmKotel = 9;
AlarmDrainVanna = 10;
AlarmDrainTualet = 11;
СТАЛО:
AlarmKotel = 9;
AlarmDrainKuhna = 10;
AlarmDrainVanna = 11;
AlarmDrainTualet = 12;
...то в этом плане код мы НЕ трогаем: поименованные константы нам в этом помогут.
Это как раз то, чего мне не хватало в программее 2003 года, которую я ща исправляю. У меня там всталялись элементы в дерево (как папки), и надо было указывать номера значков этих элементов: выбранный и обычный. Элементы вставлялись в разных местах дерева: в диалоге Импорта, в Добавлении, в Свойствах, в Перетаскивании элемента.
Сейчас мне надо сделать изменяемые значки. И надо найти все места кода, где я их вставляю. Если бы я тогда сделал бы константы типа IconTreeNormal, IconTreeSelected - то сейчас я бы их просто заменил на переменные (или по их именам нашёл места кода) - а ща надо всё вспоминать вручную.
Если же у нас сдвинутся все биты - то тогда да, придётся и DWORD тоже изменять.
Но опять же, если у нас используются поименованные константы, то нам проще сделать везде в коде поиск по слову AlarmDrainVanna и найти, где оно используется.
Если говорить о Входах и Выходах - то я тут использую концепт создания IO-переменных. Вот, погляди у меня тут, я про это писал: https://cs-cs.net/technologii-testir...a-plk#4_____io
1exan Идея КРУТАЯ! Мне не надо (я не люблю прямую адресацию), но прям респектище!
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Ну, размещение структуры в Slave-переменных - тоже по сути, прямая адресация.
Для структуры кстати тоже можно организовать такой файл - чтобы следил за выравниванием и автоматически считал адреса регистров для мастера.
В CDS2.3 есть ещё такая штука как "bitaccess". Но мне это показалось несколько замороченным способом обращения с битами