в математических функциях тоже не нашел целочисленного деления и остатка от деления.Целочисленное деление - оператор div . Остаток от деления - оператор mod.
собственно вопрос - например 1 = "00000001"Перевод из десятичной в двоичную систему в Паскале, как я вижу на примерах в интернете идет через деление на базу и разложение в массив.
есть стандартная функция какая-то или надо что-то выдумывать?
И еще вопрос - как инициализировать и работать с массивами.Еще в бете SS2 я просил ввести массивы для пользователя. (Так то массивы в SS2 есть, например состояние кнопки и тд) Но было отказано) Так что никак.
необходимо для пересчета входного значения с нелинейной зависимостью?
собственно вопрос - например 1 = "00000001"Для этого можно воспользоваться функцией GetBit (http://simple-scada.com/scripts_manual?section=global_procedure):
var
I: Integer;
aFrom: Integer; // число из которого будем брать биты
aTo: string; // строка в которую будем писать биты
begin
aFrom := 1; // инициализируем единицей
aTo := ''; // инициализируем пустой строкой
{ декрементный цикл от 7 до 0 (т.е. выполнится 8 раз) }
for I := 7 downto 0 do
if GetBit(aFrom, I) then
aTo := aTo + '1'
else
aTo := aTo + '0';
// в результате имеем строку aTo которая содержит '00000001'
end;
И еще вопрос - как инициализировать и работать с массивами.Сейчас можно работать только с локальными массивами, которые существуют в пределах процедуры/функции, например так:
var
I: Integer;
aMyArray: array[1..10] of Integer;
begin
{ заполняем массив случайными целыми числами от 0 до 19 }
for I := 1 to 10 do
aMyArray[I] := Random(20);
end.
Сейчас можно работать только с локальными массивами, которые существуют в пределах процедуры/функции, например так:Я проверял на работу с локальными массивами, у меня проект скомпилировался, но когда я запускал клиент - он бесконечно висел в запуске. С вашим примером у меня ровно также получилось. Что я делаю не так?
так прокатит?С глобальными переменными так можно было бы сделать, но в данном случае так не получится, т.к. возможно только локальное использование. Поэтому придется делать не самым удобным способом:
aMyArray: array[1..4] of Integer;
aMyArray[] := {130,120,100,70};
var
aMyArray: array[1..4] of Integer;
begin
aMyArray[1] := 130;
aMyArray[2] := 120;
aMyArray[3] := 100;
aMyArray[4] := 70;
end;
и вообще это что за язык? где подробней про него почитать?pascal/delphi
TeNQ, видимо Вы создали новый проект и без перезапуска сервера пытаетесь подключиться к этому проекту. А сервер узнает о нём только при очередном запуске.Да все верно. Прощу прощения, все работает. Я и забыл про эту "особенность"))
Поэтому придется делать не самым удобным способом:ну таким способом записывать таблицу на 128 или 256 значений конечно очень печально. надо что-то думать...
Кстати, вопрос по сабжу... Локальный массив, он-же уничтожается после окончания скрипта? То-есть читать в него НЕ вариант...наверное надо отдельный топик по массивам создавать)
А как насчет на ОРС сотворить переменных, подтянуть их в скаду и столь же муторно сравнивать по очереди?
Это вот этой функцией:Хороший пример есть в стандартном Демо-проекте. Страница "Скрипты" -> "Работа с файлами".
function TextFileReadLn: string;?
а как она работает? т.е. какую строку и из какого файла она читает?
value=CalcTable(tag,file);да, сначала нужно внедрить другие более популярные возможности, поэтому в ближайшее время это вряд ли возможно.
которая считала бы значение из таблицы в файле.. но это как я понимаю из разряда не скорых хотелок)
Кстати, вопрос по сабжу... Локальный массив, он-же уничтожается после окончания скрипта? То-есть читать в него НЕ вариант...Да, все локальные переменные уничтожаются после выполнения скрипта. А сравнивать переменные можно и без массивов, напрямую. Или Вы говорите про переменные-массивы на OPC-сервере?
А как насчет на ОРС сотворить переменных, подтянуть их в скаду и столь же муторно сравнивать по очереди?
А сравнивать переменные можно и без массивов, напрямую. Или Вы говорите про переменные-массивы на OPC-сервере?нет, нет... Именно так. Имелось в виду, что переменные на опс могут быть локальными, или из базы подтянутыми, а не грузить полудохлый контроллер.