Это обращение к сотруднику нашей фирмы Диме, и всем начинающим технологическим программистам.
Я понимаю что ты растешь, и твой код будет со временем все лучше и лучше, и восприми это сообщение не как критику, а как совет. Может кому-то сообщение будет тоже полезно.
- Дима я взял твою программу для доработки по проекту в г.Тосно, и некоторые вещи меня поразили до такой степени, что я решил написать программу с нуля, а тебе и другим начинающим программистам дать некоторые советы.
- Ты называешь переменные осмысленно, и это правильно но длинные имена переменных, типа Alarm_A1_High_T_inverse_heat (Аварии.А1.Температура обратного теплоносителя выше нормы), уменьшают читаемость кода. Рекомендация: уменьшать длину имени переменной максимально, не уменьшая читаемость значения переменной, типа Alarm_AMA_T_Out_A1.
- Не начинай имена "переменных ввода-вывода"(IO) с типа и индекса, типа In01_U1_ManualMode (Дискретный вход.У1.Переключатель в режиме ручной),где In01-означает дискретный вход 1. Это мешает тиражированию программы, так как в другом проекте к контроллеру статус переключателя "Ручной", может быть подключен к другому входу. Правда я слышал что ты отошел от этого, после тиражирования своих программ, но другим это будет совет.
- Код не должен быть линейным, т.к. это приводит к увеличению времени тиражирования программы. Дима, на языке ST есть возможность описывать свои функции и свои функциональные блоки. Функциями ты пользуешься, но только для вставки своих больших линейных блоков кода(по сути ты их используешь как макросы). Это не основное назначение функции. Одно из важных возможностей, это возвращение результата выполнения функции.
Пример(условный на ST).
4 однотипные завесы которые управляются по времени контроллером.
Включаются в промежутке от (tвкл;tвыкл) в остальное время отключены.
Линейное решение:
VAR
ON_Ctrl_Zav1,ON_Ctrl_Zav2,ON_Ctrl_Zav3,ON_Ctrl_Zav4:BOOL;
t_On_Zav1, t_On_Zav2, t_On_Zav3, t_On_Zav4 : TIME;
t_Off_Zav1, t_Off_Zav2, t_Off_Zav3, t_Off_Zav4 : TIME;
END_VAR
...
IF t_On_Zav1 > tтек AND tтек<t_OFF_Zav1 THEN
ON_Ctrl_Zav1 := TRUE;
ELSE
ON_Ctrl_Zav1 := FALSE;
END_IF;
IF t_On_Zav2 > tтек AND tтек<t_OFF_Zav2 THEN
ON_Ctrl_Zav2 := TRUE;
ELSE
ON_Ctrl_Zav2 := FALSE;
END_IF;
IF t_On_Zav3 > tтек AND tтек<t_OFF_Zav3 THEN
ON_Ctrl_Zav3 := TRUE;
ELSE
ON_Ctrl_Zav3 := FALSE;
END_IF;
IF t_On_Zav4 > tтек AND tтек<t_OFF_Zav4 THEN
ON_Ctrl_Zav4 := TRUE;
ELSE
ON_Ctrl_Zav4 := FALSE;
END_IF;
...
END;
В моем случае это бы выглядело так:
FUNCTION Ctrl_Zav:BOOL;
VAR_INPUT
t_On_Zav: TIME;
t_Off_Zav: TIME;
END_VAR
Сtrl_Zav := (t_On_Zav > tтек) AND ( tтек<t_OFF_Zav);
END_FUNCTION;
VAR
ON_Ctrl_Zav1,ON_Ctrl_Zav2,ON_Ctrl_Zav3,ON_Ctrl_Zav4:BOOL;
t_On_Zav1, t_On_Zav2, t_On_Zav3, t_On_Zav4 : TIME;
t_Off_Zav1, t_Off_Zav2, t_Off_Zav3, t_Off_Zav4 : TIME;
END_VAR
...
ON_Ctrl_Zav1 := Ctrl_Zav( t_On_Zav1, t_Off_Zav1);
ON_Ctrl_Zav2 := Ctrl_Zav( t_On_Zav2, t_Off_Zav2);
ON_Ctrl_Zav3 := Ctrl_Zav( t_On_Zav3, t_Off_Zav3);
ON_Ctrl_Zav4 := Ctrl_Zav( t_On_Zav4, t_Off_Zav4);
...
END;
Вопрос. Какой код будет легче тиражировать? Если количество завес в другом проекте будет не 4, а 10 например.
И главный совет читай больше чужих кодов, с Интернетом сейчас не проблема, и может в них ты быстрее доберешься до осознания написания удобного кода.
PS. Удобный код, это в первую очередь помощь программисту, так как программист скотина ленивая, и проще изначально написать правильно, чем каждый раз потом перелопачивать весь код.
Я понимаю что ты растешь, и твой код будет со временем все лучше и лучше, и восприми это сообщение не как критику, а как совет. Может кому-то сообщение будет тоже полезно.
- Дима я взял твою программу для доработки по проекту в г.Тосно, и некоторые вещи меня поразили до такой степени, что я решил написать программу с нуля, а тебе и другим начинающим программистам дать некоторые советы.
- Ты называешь переменные осмысленно, и это правильно но длинные имена переменных, типа Alarm_A1_High_T_inverse_heat (Аварии.А1.Температура обратного теплоносителя выше нормы), уменьшают читаемость кода. Рекомендация: уменьшать длину имени переменной максимально, не уменьшая читаемость значения переменной, типа Alarm_AMA_T_Out_A1.
- Не начинай имена "переменных ввода-вывода"(IO) с типа и индекса, типа In01_U1_ManualMode (Дискретный вход.У1.Переключатель в режиме ручной),где In01-означает дискретный вход 1. Это мешает тиражированию программы, так как в другом проекте к контроллеру статус переключателя "Ручной", может быть подключен к другому входу. Правда я слышал что ты отошел от этого, после тиражирования своих программ, но другим это будет совет.
- Код не должен быть линейным, т.к. это приводит к увеличению времени тиражирования программы. Дима, на языке ST есть возможность описывать свои функции и свои функциональные блоки. Функциями ты пользуешься, но только для вставки своих больших линейных блоков кода(по сути ты их используешь как макросы). Это не основное назначение функции. Одно из важных возможностей, это возвращение результата выполнения функции.
Пример(условный на ST).
4 однотипные завесы которые управляются по времени контроллером.
Включаются в промежутке от (tвкл;tвыкл) в остальное время отключены.
Линейное решение:
VAR
ON_Ctrl_Zav1,ON_Ctrl_Zav2,ON_Ctrl_Zav3,ON_Ctrl_Zav4:BOOL;
t_On_Zav1, t_On_Zav2, t_On_Zav3, t_On_Zav4 : TIME;
t_Off_Zav1, t_Off_Zav2, t_Off_Zav3, t_Off_Zav4 : TIME;
END_VAR
...
IF t_On_Zav1 > tтек AND tтек<t_OFF_Zav1 THEN
ON_Ctrl_Zav1 := TRUE;
ELSE
ON_Ctrl_Zav1 := FALSE;
END_IF;
IF t_On_Zav2 > tтек AND tтек<t_OFF_Zav2 THEN
ON_Ctrl_Zav2 := TRUE;
ELSE
ON_Ctrl_Zav2 := FALSE;
END_IF;
IF t_On_Zav3 > tтек AND tтек<t_OFF_Zav3 THEN
ON_Ctrl_Zav3 := TRUE;
ELSE
ON_Ctrl_Zav3 := FALSE;
END_IF;
IF t_On_Zav4 > tтек AND tтек<t_OFF_Zav4 THEN
ON_Ctrl_Zav4 := TRUE;
ELSE
ON_Ctrl_Zav4 := FALSE;
END_IF;
...
END;
В моем случае это бы выглядело так:
FUNCTION Ctrl_Zav:BOOL;
VAR_INPUT
t_On_Zav: TIME;
t_Off_Zav: TIME;
END_VAR
Сtrl_Zav := (t_On_Zav > tтек) AND ( tтек<t_OFF_Zav);
END_FUNCTION;
VAR
ON_Ctrl_Zav1,ON_Ctrl_Zav2,ON_Ctrl_Zav3,ON_Ctrl_Zav4:BOOL;
t_On_Zav1, t_On_Zav2, t_On_Zav3, t_On_Zav4 : TIME;
t_Off_Zav1, t_Off_Zav2, t_Off_Zav3, t_Off_Zav4 : TIME;
END_VAR
...
ON_Ctrl_Zav1 := Ctrl_Zav( t_On_Zav1, t_Off_Zav1);
ON_Ctrl_Zav2 := Ctrl_Zav( t_On_Zav2, t_Off_Zav2);
ON_Ctrl_Zav3 := Ctrl_Zav( t_On_Zav3, t_Off_Zav3);
ON_Ctrl_Zav4 := Ctrl_Zav( t_On_Zav4, t_Off_Zav4);
...
END;
Вопрос. Какой код будет легче тиражировать? Если количество завес в другом проекте будет не 4, а 10 например.
И главный совет читай больше чужих кодов, с Интернетом сейчас не проблема, и может в них ты быстрее доберешься до осознания написания удобного кода.
PS. Удобный код, это в первую очередь помощь программисту, так как программист скотина ленивая, и проще изначально написать правильно, чем каждый раз потом перелопачивать весь код.
Комментариев нет:
Отправить комментарий