Отнимайте от 5 минут вашу переменную и получите обратный отсчёт.
Вид для печати
Подскажите как можно в КДС3.5 посмотреть на предмет не используемых переменных и т.п.? В КДС2 это проект-контроль.
Проект - Установки проекта - Статический анализ - ставим галочки
Теперь после генерации кода (меню Компиляция) видим соответствующие сообщения.
Вложение 18440
Вложение 18441
Доброго времени суток, подскажите пожалуйста, есть задача, вести журнал отчёта, в виде таблицы ежедневно, например, каждый день по завершении рабочей смены производить запись в таблицу и сохранять, возможно ли осуществить это в СПК, если да, то с чего начать. Пишу программу в CFС, заранее благодарен за помощь.
Подскажите как устранить ошибки ,ткните носом.
Причем стабильна только 255 ошибка остальные плавают при компилировании ,интересно что именно не так настроил и как исправить.
Доброго дня .. КашниковСЮ вы в своём проекте выберите какой нибудь один способ подключения модулей по мотбас.. Вложение 18458через устройства или Вложение 18459через программу.. да порт указан не верноВложение 18460. А так смотрите примерыhttp://www.owen.ru/forum/showthread.php?t=21365 или http://www.owen.ru/forum/showthread.php?t=15530 Обмен по интерфейсам: ...СПК+МВ110-4ТД: или примерно так https://yadi.sk/d/cm1A0fHbh5Ryq
Удачи..
Здравствуйте, при подключении библиотеки syslibtime появляются вот такие ошибки, если кто сталкивался с этим подскажите в чём проблема.
------ Компиляция : Приложение: Device.Sim.Device.Application -------
типизировать код...
генерировать код...
генерировать глобальные инициализации ...
генерировать код инициализации...
генерация перемещений...
[WARNING] Мойка самообслуживания на СПК: C0200: Отсутствует разрешение для заполнителя CmpCodeMeter
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__stApplicationName', 32 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__dwChecksum', 4 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__ulLength', 4 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__bInitNew', 1 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
[ERROR] syslibtime, 1.1.0.0 (codesys): PersistentVars(Строка 1): C0104: Недостаточно памяти глобольных данных: Переменная '__bDummyForAlignment', 3 байт. (Инкрементная компиляция может привести к фрагментации памяти. Выполните команду "Компилировать, Очистить" для принудительного перераспределения данных и кода.)
Компиляция завершена -- 5 ошибок, 1 предупреждений : загрузка невозможна!
уважаемые господа подскажите как запрограмировать кнопки самого спк 207 , где они лежат
спасибо ! liboyl буду пробовать!
добрый день, подскажите пожалуйста, есть входная переменная на ней через определённое время появляется сигнал типа BOOL(True), и по появлению этого сигнала необходимо производить запись из другой переменной в переменную массива, трудность у меня заключается в том, чтобы по приходу сигнала производить запись в разные переменные массива, то есть я понимаю так, появился разрешающий сигнал на запись, произошла запись, потом появился следующий сигнал, должен осуществиться запрет на запись в первую переменную массива и осуществиться разрешение на запись в следующую переменную того же массива, как это осуществить? Пишу программу в CFC.
Ну, например так:
Вложение 18638
Когда переменная Trigger принимает значение TRUE, то счетчик Index увеличивается на единицу, и переменная Variable записывается в равный Index'у элемент массива Arr.
Порядок выполнения блоков имеет значение.
Если у вас сигнал приходит импульсом (т.е. после появления сразу сбрасывается в FALSE), то блоки 4-6 не нужны.
Спасибо за помощь, но у меня есть вопрос по поводу увеличения Index на единицу, у меня массив My_Data: ARRAY[0..89] OF My_Type; и я так понял [Index] это [0..89] а как прибавлять к [Index] это [0..89] единицу и ещё, у меня массив (как бы состоит) из структуры и всё это используется для таблицы состоящей из двух столбцов и много строчек, так вот я по появлению сигнала, допустим в 18:00, каждый день произвожу запись в таблицу, у меня в таблицу запись производится но только в одну строку под №0, а по приходу следующего сигнала на следующий день, также в 18:00, у меня в таблицу производится следующая запись, только вот в эту же строку под №0, просто происходит перезапись, а нужно чтобы запись на следующий день происходила в следующую строку под №1 и так далее, помогите с советом пожалуйста, программированием занимаюсь всего 1.5 месяца и поэтому сложновато догадаться самому, а информации по работе с таблицами в визуалке на СПК почти нет или я так умею искать, за ранее благодарен за внимание.
TYPE My_Type :
STRUCT
DAT: DT;
sred: DWORD;
END_STRUCT
END_TYPE
Выложите, пожалуйста, ваш проект, чтобы было, от чего отталкиваться.
Я правильно понимаю, что вы хотите что-то вроде этого?
http://www.youtube.com/watch?v=iX1t7U8EHm0
Да, точно вы правильно поняли, только там вы нажимаете кнопку триггер и по её срабатыванию производится запись, а у меня вместо кнопки сигнал приходит по времени каждые сутки допустим в 18:00, но в принципе это одно и тоже.
структуру объявил так
Вложение 18654
Массив объявил так
Вложение 18655
к сажелению полностью выложить проект не могу, делается частями, но вот моя часть это работа с часами реального времени и вот собственно ведение таблицы по времени
первая часть
Вложение 18658
вторая часть
Вложение 18659
Заранее благодарен за помощь
экран визуализации выглядит вот так
Вложение 18660
Извините, мне кажется, вам будет легче адаптировать код моей ST программы на CFC, чем мне - разобраться в вашей.
Вложение 18664
Если нужно, чтобы изначально таблица была пустой, а не заполнена нулями, то надо делать конвертацию в тип STRING и выводить в таблице его.
Спасибо за помощь, попробую адаптировать, правда ST я не очень понимаю, там на скриншотах верхняя часть - это я выдернул системное время преобразовал в секунды с 1970г и вобщем выделил минуты и часы, а потом для проверки поставил для разрешения на запись переменную Rabs, в которой каждую минуту появляется сигнал, и эта часть программы производит запись в таблицу Вложение 18665, попробовал сделать так Вложение 18666 но не получилось, буду пробовать дальше может что нибудь и получится
Самое главное - когда вы пишите MyData[0], вы записываете данные в нулевую строку структуры (и, соответственно, таблицы). Поэтому очевидно, что у вас данные будут только в этой строке. Нужно использовать MyData[index], где index - переменная типа INT. Меняя ее значение, вы будете менять строку структуры, в которую записываются данные.
Спасибо за ответ, я думал об этом, сейчас буду пробовать, а объявить массив нужно так MyData[index] OF My_type или так MyData[index1..index31] OF My_type и ещё хотел спросить, а вот в таблицу в столбец дата в строки записывается значение текущей даты и времени DT#2015-06-19-18:00:00 а возможно чтобы запись велась так 2015-06-19-18:00:00 или отображалась так на СПК
Массив у вас объявлен правильно: MyData[0..89] OF My_type. Но когда вы обращаетесь к его элементу в программе, обращайтесь не по константе [0], а по переменной [index]. Меняя значение переменной index, вы будете менять элемент, в который происходит запись.
По поводу времени - преобразуйте его в строку (блок DT_TO_STRING) и используйте функцию Delete из библиотеки Standard, чтобы вырезать ненужные символы. Соответственно, вместо массива DT вам потребуется массив STRING.
Ура понял как это сделать, выкладую скрин Вложение 18673
Выкладываю скрин с функцией delete библиотеки standart, которая обрезает (DT# ) Вложение 18674 и визуалка Вложение 18675
Рад, что у вас все получилось. Напоминаю, что надо проверять, чтобы значение Index не превысило 89, иначе произойдет ошибка при попытке записи в несуществующий элемент массива.
Ну и очевидный совет - можно преобразовать значения дохода в STRING, чтобы в незаполненных строках вместо нулей была пустота.
Спасибо за совет, столкнулся с новой проблемой работы с таблицей, при первом запуске в первую строку таблицы производится запись 1970-01-01-00:00:00 Вложение 18683 сейчас пытаюсь решить эту проблему, в идеи хочу создать 12 таблиц на каждый месяц года, в которые каждые сутки будут заноситься и сохраняться данные даты-времени и дохода, для того чтобы можно было просмотреть доход за любой день года, интересно хватит ли памяти у СПК 110 ещё раз спасибо Евгений Кислову за помощь. Так же вижу проблему с исчезновением питания на длительный период, после пропажи и появления питания контроллера происходит запись в первую строку таблицы, а нужно чтобы запись продолжалась со следующей строки, ведь нумерацию строк в таблице я хочу использовать как нумерацию дней в месяце.
Спасибо за совет, только вот когда меняешь блоки местами получается вот что Вложение 18686 вместо Вложение 18686, получается что при включении в любом случае происходит запись в первую строку таблицы, а должна происходить запись, только когда в переменной Rabs есть разрешающий сигнал, а в переменной Rabs сигнал появляется только когда происходит сравнение значения переменной cdwtime5 со значением уставки - переменная Ust_1s (переменная cdwtime5 гоняет внутри секунды от 0 до 60)(переменная Ust_1s имеет значение 0) обе переменные имеют тип Word, после оперетора сравнения, в переменную Rabs кратковременно записывается значение True. Вложение 18688
Про энергонезависимые переменные я почитал, только вот не пойму зачем нужны тогда переменные не энергонезависимые, ведь энергонезависимые переменные лучше и в проекте можно все переменные делать энергонезависимыми или что то не дочитал.
Ура, получилось сделать так, что бы при включении запись сразу же не производилась в первую строку, а только тогда когда придёт нужное время Вложение 18690 нужно сделать было так Вложение 18691
Нужен пример работы UniWrite UniRead с МУ110-32Р.
Зарание спасибо.
Не могу разобраться. Создал в проекте кнопку для управления пользователями. Соответственно хочу чтобы эта кнопка становилась невидимой при смене пользователя, а вместо неё появлялась кнопка выхода. Но оказывается, что стоит только у пользователя выше None поставить галочку на невидимый, соответственно невидимый становиться и у None, т.е. пользователя по умолчанию. В тупике...:confused:
Именно так у меня в СКАДЕ реализовано. Проблема в том,что не могу найти как переменные пользователей называются в CDS
Спасибо, как раз и не мог найти VisuElems.CurrentUserName <> "". Про пустые кавычки бы и не подумал...:)
В таком видепеременная почему-то всегда в тру. Сделал такЦитата:
IF VisuElems.CurrentUserName <> "" THEN
ButtonInvisible:=TRUE;
END_IF
Код:IF VisuElems.CurrentUserName <> "" THEN
hideButUser1:=TRUE;
hideButUser2:=FALSE;
ELSE
hideButUser1:=FALSE;
hideButUser2:=TRUE;
END_IF
Не могу вставить MOVE в программу, вставляется блок с одним входом и одним выходом (СПК207web). Подскажите, а то я уже все перепробовал
У MOVE, собственно, как раз один вход и один выход.
Но, очевидно, вы хотите EN/ENO:
Вложение 18750 Вложение 18751
Интересно, а возможно ли присвоить переменной массив, идея заключается в том чтобы присваивать в разное время одной и той же переменной разные массивы, таким образом по достижении, ну например последнего числа месяца, переключать запись из одной таблицы в другую таблицу, символизирующую другой (следующий) месяц, попробовал сделать так Вложение 18753 перестал производить запись в таблицу, вроде и ошибок компилятор не находит, я так предполагаю, что нельзя в одну и туже переменную производить две разные записи, наверное стоит попробовать как нибудь по другому, или как то разделить эти записи по времени, пока не пойму что делать.
Если вам надо одновременно отображать 12 разных таблиц, то вам в любом случае потребуется 12 разных массивов.
По-моему, проще вырезать из системного времени месяц, и в зависимости от этого запускать блок записи в соответствующий массив.
Спасибо за ответ, я тоже так же и подумал, создал 12 разных массивов, создал визуалку Вложение 18756 с переключением окон, в зависимости от нажатого месяца отображается соответствующее окно и там таблица месяца, из системного времени вырезал месяц присвоил его число переменной mesiac тип int и хотел с помощью оператора MUX, в зависимости от числа месяца присваивать соответствующий массив переменной index_dt (дата и время) и index_dox (доход) что бы в зависимости от того какой месяц производилась запись в таблицу этого месяца, соответственно в соответствующее число, но хотя компилятор ошибок не выдаёт, он перестал производить запись в таблицу. Где то логическая ошибка. Выкладываю скрин кода Вложение 18758