PDA

Просмотр полной версии : Множественная запись выхода



Boris_K
26.06.2014, 13:28
У меня в проекте некоторые переменные, соответствующие выходам ПЛК, а также переменные в модуле модбас слейв, могут перезаписываться несколько раз за один проход цикла. Это вроде бы совершенно нормальная ситуация, т. к. состояние выходов (в том числе и модбас) реально меняется только после прохода каждого цикла (собственно, на это и рассчитывал при программировании). Просто немного смутило что в Кодесис есть контроль некоторых косяков, в том числе есть контроль множественной записи выхода. Не обращать внимания?

Вольд
26.06.2014, 18:29
У меня в проекте некоторые переменные, соответствующие выходам ПЛК, а также переменные в модуле модбас слейв, могут перезаписываться несколько раз за один проход цикла.
Программа написана явно неграмотно.

Boris_K
26.06.2014, 19:58
Программа написана явно неграмотно.

А это зря. Просто программа не "дважды два". И это сделано чтобы не плодить лишние переменные.

Валенок
26.06.2014, 21:02
В большей степени соглашусь с Вольдом, множественная запись - признак использования выходов как буфера, что в общем случае - плохая привычка. Здесь никто 2x2 не делает, но смысл экономить на переменных если тут никто кроме вас не использует память ?

Касаемо физ.выходов - можно не обращать внимания. Касаемо области обмена - лучше б проверить. Как-то умышленно затягивал минц до 200..300мс, но слейв в конфигурации опрашивался извне значительно чаще. Опрос был в норме - делаем выводы. Но, повторюсь, лучше проверить вживую.

Вольд
27.06.2014, 09:41
А это зря. Просто программа не "дважды два". И это сделано чтобы не плодить лишние переменные.
Твои представления о дисциплине программирования далеки от совершенства.

Boris_K
27.06.2014, 14:30
Твои представления о дисциплине программирования далеки от совершенства. Твои тоже. А мой опыт программирования около 5 лет. А вообще, Вольд, не первый раз замечаю, что свербит что-то у тебя.

Вольд
27.06.2014, 14:43
А мой опыт программирования около 5 лет.
А мой более 25 лет. Ты "под стол пешком ходил", а, возможно, еще и на свет не появился когда я начинал программировать.


А вообще, Вольд, не первый раз замечаю, что свербит что-то у тебя.

Не знаю, что ты имеешь в виду, но с самочувствием и душевным состоянием у меня все в порядке, чего и тебе желаю

Boris_K
27.06.2014, 15:25
Ну и чудненько. Только не думал я что гуру с 25 летним опытом должны оскорблять без повода кого попало. Другой человек в этой теме ответил по делу, а вы тут только мусорите.

Вольд
27.06.2014, 15:38
Ну и чудненько. Только не думал я что гуру с 25 летним опытом должны оскорблять без повода кого попало. Другой человек в этой теме ответил по делу, а вы тут только мусорите.
Тебе не надо без причины оскорбляться, а надо повышать свой профессиональный уровень.

Yegor
27.06.2014, 15:41
Борис, это опасно с точки зрения потокобезопасности. Если какой-то вспомогательный поток ввода-вывода прочтёт переменную до записи последнего значения, то на выходе окажется не то, что вы задумывали.

Ещё это признак высокой связанности (http://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D0%BE%D 1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D 0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0% BD%D0%B8%D0%B5)).

В вашу защиту скажу, что анализатор в кодесисе беспросветно тупой и считает множественной записью даже блоки в условиях:
IF something THEN
OUT := 5;
ELSE
OUT := 3.12;
END_IF

Boris_K
27.06.2014, 16:06
Валенок, Yegor, спасибо за информацию. Хотя на курсах в Овене говорили, что переменные, связанные с областью вывода, "падают" на эту область только после выполнения каждого цикла. То есть эти переменные копируются в область вывода только после прохода цикла, что в общем выглядит правильнее. Так говорили на курсах, да и где-то на форуме тут видел те же утверждения.

Вольд, я про ваш профессиональный уровень ничего не говорил, и вас попрошу о том же.

Yegor
27.06.2014, 17:57
Хотя на курсах в Овене говорили, что переменные, связанные с областью вывода, "падают" на эту область только после выполнения каждого цикла. То есть эти переменные копируются в область вывода только после прохода цикла, что в общем выглядит правильнее. Так говорили на курсах, да и где-то на форуме тут видел те же утверждения.Ну, если не область вывода, так ещё какая-нибудь параллельная задача выполнится — их ведь самому можно создавать.

Обращать или нет внимание — однозначно не скажешь. Эти предупреждения могут быть и в хорошем коде, и в ужасном. Не шибко полезная проверка, на мой взгляд.