Сообщение от
Евгений Пашигоров
Пунктом "Очистить все" действительно, я не пользуюсь (даже не знаю, что он делает). Всегда делаю "Компилировать все".
Непонятная мне необходимость в указателях! А зачем они вам?
Чтобы можно было оперировать не целиком данными, а указателями на них, но это достаточно сложное для понимания колдунство. Утрированный пример таков: есть два человека в отеле, которые хотят поговорить (обменяться данными), и можно их друг с другом свести лицом к лицу т.е. доставить целиком человека из одного номера в другой, материально переместить, и есть телефонистка, которая может просто соединить телефонное гнездо первого человека с телефонным гнездом второго человека, и произойдёт передача данных от одного человека к другому. Указатели используются для достижения полиморфизма, когда вам, грубо говоря, не важен сам человек, а важен человек в том номере, с которым соединит телефонистка, а будет там мужчина, женщина или ребёнок не так принципиально, утрировано как-то так.
Частный случай использования указателей, как принципиального способа структурирования данных - это массивы.
И тогда ваша запись вида:
Код:
PROGRAM temperature_ctrl
VAR
pwm1chan,
pwm2chan,
pwm3chan,
pwm4chan,
pwm5chan,
pwm6chan,
pwm7chan,
pwm8chan: PWM_B;
END_VAR
превращается в:
Код:
pwmchan: array[1..8] of PWM_B;
А конструкция вида:
(
Код:
*формируем код устройства*)
...
panel_error1 :=
BOOL_TO_INT(cmd_l_mould_forw OR cmd_l_mould_back
OR cmd_l_mould_open OR cmd_l_mould_close) * 1 + (*левая форма*)
BOOL_TO_INT(cmd_r_mould_forw OR cmd_r_mould_back
OR cmd_r_mould_open OR cmd_r_mould_close) * 2 + (*правая форма*)
BOOL_TO_INT(cmd_screw_rising OR cmd_screw_lower) * 4 +... (*шнек*)
...
Превращается в:
Код:
panel_error1.0:=cmd_l_mould_forw OR cmd_l_mould_back OR cmd_l_mould_open OR cmd_l_mould_close;
panel_error1.1:=cmd_r_mould_forw OR cmd_r_mould_back OR cmd_r_mould_open OR cmd_r_mould_close;
...
т.е. не целиком числовые значения перемещать, переммножать и суммировать в переменные, а работать напрямую с битами.