Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - TeNQ

Страницы: 1 2 3 [4] 5 6 ... 14
46
Я вам проект на почту вышлю. А то я не знаю, как сворачивать текст на форуме.

47
Цитировать
При этом мы рекомендовали бы работать с локальными переменными как и в других языках, т.е. сначала инициализировать, а затем использовать, чтобы значение переменной всегда было очевидным.
Ясно. Значит буду явно ициализировать.

Цитировать
Вы уверены что событие OnDataChange переменной не наступает раньше чем Вы вызываете AddMessageToGroup?
Да. Это один длинный скрипт. Вначале идет условный вызов AddMessageToGroup, далее в операторе case идут варианты сообщений из списка. Скрипт выполняется один раз по-изменению.

48
Я столкнулся с интересной работой скрипта и стал разбираться. Дело касается локальных переменных объявляемых в скриптах. Я написал простой проект-тест. Кнопка и текстовое поле. По нажатию на кнопку (OnClick) выполняется скрипт
Код
var
  aCount : integer;
begin
  aCount := aCount + 1;
  Text1.Text := IntToStr(aCount);
end.   
Если я правильно понимаю, как работают локальные переменные (каждый раз при запуске скрипта для локальной переменной ищется свободное место в памяти, выделяется и инициализируется по умолчанию нулем), то при нажатии на кнопку в текстовом поле всегда должна выводиться 1. Но не тут то было. В SS2 локальная переменная работает не так. При повторном выполнении скрипта переменная сохраняет значение,  поскольку при каждом нажатии на кнопку значение в текстовом поле увеличивается на 1, т.е. aCount работает как счетчик. По-моему это неправильно. Так должна работать виртуальная переменная объявленная в списке переменных проекта. А это же локальная переменная созданная только на время работы скрипта, и при новом вызове скрипта ее значение утрачивается или я неправильно что-то понимаю?
И второй вопрос. У меня вызывается процедура AddMessageToGroup(), далее по программе присваивается значение переменной связанной со списком сообщений. Но в журнал первой попадает сообщение из списка, а уже потом сообщение созданное процедурой, иногда и с задержкой в секунду. Почему так получается?

49
Ошибки / "Мелкие" ошибки
« : 11 Июля 2017, 13:05:42 »
Поскольку иногда находятся незначительные ошибки, то ради них не хочется открывать отдельную тему. Поэтому тему создал для себя, но и другим предлагаю сообщать о таких ошибках здесь.

Первая ошибка.
Почему-то если, после любого слова вплотную поставить фигурные скобки, то оно окрашивается в зеленый цвет комментария. Хотя это ни на что не влияет. И вообще  окрашивание фигурными скобками комментария иногда ведет себя непредсказуемо. После их удаления, часть кода иногда остается окрашенной. Правда после компиляции окрашивание исчезает. Также ни на что не влияет.

Вторая ошибка. Неверное расположение списка доступных методов на экране. Вызывается по Ctl + пробел. Окно располагается так, что первая строчка окна закрывается строкой с названием процедуры и ее не видно. Это ошибка, потому что окно позиционируется, относительно положения курсора так, чтобы список был всегда виден полностью. Когда я целенаправленно пытался ее вызвать, у меня не получалось. Я и сейчас не знаю, почему оно сбивается.

Третье. Может это и не ошибка. Но мне кажется это неправильно, что когда ставишь точку в комментарии вызывается тот самый список доступных методов. Я хочу просто поставить точку в предложении, жму пробел. А мне добавляется .sender.

50
Цитировать
Можем в ближайшем обновлении сделать, чтобы при переходе в скрипты через меню "Проект - Скрипты" (или комбинацию клавиш "Alt + S" переход осуществлялся к скрипту, который редактировался последним.
Спасибо. Было бы здорово.
А можно сделать так? Захожу в скрипт, который хочу редактировать. Дохожу до позиции редактирования, нажимаю Ctrl + 1. Захожу во 2й скрипт, который хочу редактировать. Дохожу до позиции редактирования, нажимаю Ctrl + 2. Дальше, если я нажимаю Alt + 1 находясь в редакторе скриптов, то перемещаюсь на позицию редактирования в 1 скрипте и Alt + 2 во 2м?

51
В редакторе можно выделить имя объекта (на панели свойств объекта), вставить имя в буфер (ctrl+c) и использовать в скрипте. Это удобно. А вот имя связанной с объектом переменной нельзя выделить. Вылезает список, в списке тоже не выделишь. Можно ли как-то сделать, чтобы имя связанной переменной редактировать было нельзя, но выделить для вставки в буфер можно.
 
Сейчас находясь в скриптах я нажимаю стрелку в левом верхнем углу и попадаю на то же место, с которого ушел. Те же объекты в поле зрения, то же увеличение и т.д. Это удобно. Но можно ли сделать такую же стрелку для возврата в скрипты? Это было очень удобно. Сейчас обычно для меня все выглядит так. Находясь в скрипте, я хочу посмотреть на имя объекта, связи и тд. Иду по стрелке на окно, где расположены объекты. Там совершаю какие-то действия (копирую имя объекта и т.д.) и хочу вернуться в скрипт на то место, с которого ушел. Ан нет. Приходиться лезть в папки, искать скрипт, потом прокручивать скрипт, ища место. Это занимает время. И самое главное это много раз повторяется.
А если можно сделать в редакторе скриптов возможность переключаться между открытыми скриптами (закладки сверху) как в том же Notepad++ было бы просто идеально.

52
TeNQ, здравствуйте. Можем сделать выбор цвета шрифта в настройках проекта для каждого из трёх типов сообщений. Это подойдёт?
Подойдет, только я не совсем понимаю как это будет работать. Ведь функция вывода сообщения не привязана к типу. Там вводится заголовок, текст и фон. Если только сделать новую функцию, которой передается заголовок, текст, тип сообщения(с настройками в проекте)?

53
Здравствуйте.
Можно ли добавить в процедуру ShowMessage цвет выводимого в сообщении шрифта?
Дело в том, что
Код
ShowMessageAll('Предупреждение!', 'Высокая температура', clRed);
выводит сообщение с белым тонким шрифтом на красном фоне. И на мониторе среднего качества приходится сильно напрягать зрение, чтобы прочитать текст. А на мониторе низкого качества(LG 15``), вообще не разобрать.

54
Ошибки / Re: "Вешается" сервер скады.
« : 04 Июля 2017, 18:36:12 »
Здравствуйте.
Возился с таймерами. Иногда при запуске проекта, сервер подвисал с ошибкой. Компилятор при этом на ошибки не ругается. Причем тот же проект может запуститься нормально, а может и подвиснуть на запуске. Если запускается, работает без проблем. Точную причину я не нашел, но скорее всего дело в том, что я обращался к переменной использованной в таймере.
Код
aVvrTRM_StepOperatingTime.Value     := StrToTime ('00:00:00');
aVvrTRM_ProgramOperatingTime.Value  := StrToTime ('00:00:00');
Это остатки старого кода. Я все это убрал, заменил на TimerReset. Но может причина и не в этом. Потому что, непонятно почему виснет только на запуске, а в процессе работы нет.
И еще мелкая ошибка. Если поле находится в состоянии редактирования (текст выделен, мигает курсор) и в скрипте в этот момент прошел запрет доступа к полю, то оно "замораживается." Т.е. остается выделение и курсор, причем отображаемое значение больше в поле не меняется, несмотря на изменение переменной в скрипте. Разморозить можно сменив страницу и вернувшись обратно.

55
Я создал две переменных vrTime, vrFrom типа DateTime в редакторе. В скрипте использовал процедуру TimerStart(vrTime, vrFrom); И компилятор ругается на несовместимость типов TDateTime и TM_Variable. У вас в демо-проекте не ругается. Буду разбираться.
П.С. Все разобрался.
TimerStart(vrTime,  vrFrom.AsDateTime) ;  Вот так надо было сразу) Это я сам запутался.

56
Решил попробовать новые процедуры TimerStart и т.д. Но сразу же возник вопрос, а как ими пользоваться? Дело в том, что процедура требует параметр AVariable типа TM_Variable. Я как-то сразу на это и не обратил внимание. Я ожидал тип TDateTime. Да и в описании к процедуре написано - "Переменная должна быть объявлена в редакторе переменных." Переменную типа TM_Variable не объявишь в редакторе. И второй вопрос, а что за параметр Afrom - "Запускает таймер по переменной AVariable начиная с времени AFrom". Это смещение для AVariable или время запуска(задержка запуска) процедуры?

57
Здравствуйте.
Можно ли добавить функцию Find&Replace в пределах скрипта?

58
Цитировать
Т.е. требуется запустить таймер и только однажды (когда отсчет дойдёт до нуля) выполнить скрипт?
Именно так. У меня в проекте реализован отложенный запуск прибора. Оператор вводит время и запускает. Идет обратный отсчет и в положенное время прибор запускается. Все работает. Но если будет глобальная процедура, я ее использую. Да и другим будет полезна такая процедура.
Как deldemo выше написал, процедура должна работать как обычный таймер в ПЛК. Только вместо входа IN отдельные процедуры. Запуск, останов, пауза, сброс.

59
Здравствуйте.
Вы ввели новые глобальные процедуры TimerStart и т.д. Это удобно, я сейчас думаю перевести учет времени выполнения программы на них. Но это все таки не таймер. Это секундомер. А можете ли вы ввести процедуру таймера? Чтобы это работало так. Я передаю этой процедуре запуска таймера уставку в виде переменной типа TDateTime, переменную типа TDateTime для текущего значения таймера, и переменную типа Boolean для выхода таймера и запускаю обратный отсчет до 0. Отработала уставка - переменная выхода таймера установилась в 1 и включился скрипт "Сработал таймер" наподобие скрипта "Выполнен SQL запрос" .
По аналогии с введенными процедурами таймер можно запустить, остановить, поставить в паузу, сбросить. Читать можно из связанной с процедурой переменной текущее значение уставки, статус таймера, статус выхода таймера.

60
Здравствуйте.
Можно ли добавить колонку "Шкала" в редакторе переменных? Сейчас не совсем удобно прокликивать каждую переменную, чтобы посмотреть какая шкала ей присвоена.

Страницы: 1 2 3 [4] 5 6 ... 14