1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

SCL для S7=7-1200

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1737
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 78 раз
Поблагодарили: 235 раз

SCL для S7=7-1200

Сообщение petr2off »

велел мне тут начальник заняться программированием для S7-1200. Потребовалась сне RAND функция, пошукал по просторам интернета, не перевелись там еще добрые люди. Содрал оттуда программку для генератора псевдослучайных чисел.
// Get tick count
CALL "TIME_TCK" // [SFC64]
RET_VAL:=#Tick // [Local Time value]
// Use tick count to determine a "random" rotate value from 0 - 32
L #Tick
AD DW#16#1F
T #Rot
// Scramble the bits by rotating and XORing them
L #Tick
L #Rot
RLD
L #Tick
XOD
ABS
L #upper_limit // верхняя граница чисел
MOD
T #random

Радостный такой начал писать FC блок на SCL - не идет. Залез в мануалы - оказалось, что теперь все не так. Не могу сказать, что изменения мне не понравились, но было неожиданно. Теперь она выглядит так:
#VR := RD_SYS_T(OUT => #Ttmp);
#Tick := #Ttmp.NANOSECOND / DW#1000;
#Rot := #Tick & DW#16#1F;
#Txor :=SHR(IN:=#Tick, N:=#Rot);
#Tick := #Tick XOR #Txor;
#Tick := ABS_DINT(IN := #Tick);
#Tick := #Tick MOD #upper_limit;
#RANDA := #Tick;

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

SCL для S7=7-1200

Сообщение Михайло »

Вверху код на языке на STL, а не на SCL.
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1737
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 78 раз
Поблагодарили: 235 раз

SCL для S7=7-1200

Сообщение petr2off »

Получается что для S7 - 1200 STL Нет ?

Отправлено спустя 7 минут 14 секунд:
Т.е. я то считал, что S7-1200 нет паскале образного языка, а получается совсем наоборот.

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

SCL для S7=7-1200

Сообщение Михайло »

Ага, так и есть.
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1737
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 78 раз
Поблагодарили: 235 раз

SCL для S7=7-1200

Сообщение petr2off »

Мда. Лишний раз убеждаешься, что если что то непонятно - учи матчасть. Открыл мануал по программированию 1200/1500. Читаю. Вижу существенные отличия от программирования S7-300/

Shtynder
новенький
новенький
Сообщения: 1
Зарегистрирован: 05 сен 2018, 14:37
Имя: Петр
Страна: Россия
город/регион: Саяногрск

SCL для S7=7-1200

Сообщение Shtynder »

petr2off писал(а): 28 сен 2018, 07:08 велел мне тут начальник заняться программированием для S7-1200. Потребовалась сне RAND функция, пошукал по просторам интернета, не перевелись там еще добрые люди. Содрал оттуда программку для генератора псевдослучайных чисел.
// Get tick count
CALL "TIME_TCK" // [SFC64]
RET_VAL:=#Tick // [Local Time value]
// Use tick count to determine a "random" rotate value from 0 - 32
L #Tick
AD DW#16#1F
T #Rot
// Scramble the bits by rotating and XORing them
L #Tick
L #Rot
RLD
L #Tick
XOD
ABS
L #upper_limit // верхняя граница чисел
MOD
T #random

Радостный такой начал писать FC блок на SCL - не идет. Залез в мануалы - оказалось, что теперь все не так. Не могу сказать, что изменения мне не понравились, но было неожиданно. Теперь она выглядит так:
#VR := RD_SYS_T(OUT => #Ttmp);
#Tick := #Ttmp.NANOSECOND / DW#1000;
#Rot := #Tick & DW#16#1F;
#Txor :=SHR(IN:=#Tick, N:=#Rot);
#Tick := #Tick XOR #Txor;
#Tick := ABS_DINT(IN := #Tick);
#Tick := #Tick MOD #upper_limit;
#RANDA := #Tick;
Здраствуйте, скажите а этот код точно работает в 1200 на SCL? Если да, то какие типы переменных используются?
Ответить

Вернуться в «Simatic Step7»