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

С скрипт

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

Ответить

Автор темы
bov
новенький
новенький
Сообщения: 1
Зарегистрирован: 26 янв 2023, 10:31
Имя: Олег
Страна: Россия
город/регион: Москва

С скрипт

Сообщение bov »

Ситуация - вариант 2 циклит процедуру

Код: Выделить всё

k = "Kol_Block"; //переменная из контроллера - константа
1.
for ( i = 0; i <= k; i++)
{
	if (i > 98) break;
	sprintf(TagPrefix,"%s%d%s","Action_Block[",i,"]");
	sprintf(TagPrefix1,"%s%d","Block_",i);
	sprintf(TagPrefix2,"%s%d%s","Action_Block[",i,"].ID_Device");
	DeviceID = GetTagChar(TagPrefix2); //наименование устройства
	Script_Action("Algo_Graf",TagPrefix1,"fsp_Block",TagPrefix,DeviceID);
}
2.
k = "Kol_Block"; //переменная из контроллера - константа

for ( i = 0; i <= k; i++)
{
	if (i > "Kol_Block") break;

	sprintf(TagPrefix,"%s%d%s","Action_Block[",i,"]");
	sprintf(TagPrefix1,"%s%d","Block_",i);
	sprintf(TagPrefix2,"%s%d%s","Action_Block[",i,"].ID_Device");
	DeviceID = GetTagChar(TagPrefix2); //наименование устройства
	Script_Action("Algo_Graf",TagPrefix1,"fsp_Block",TagPrefix,DeviceID);
}
Кто подскажет причину
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4909
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 236 раз
Поблагодарили: 425 раз

С скрипт

Сообщение VADR »

на будущее: для оформления вставок кода в сообщения у нас есть тег [ code ] (пятая слева кнопка).
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

С скрипт

Сообщение stesl »

bov писал(а): 26 янв 2023, 10:48 Кто подскажет причину
Kol_Block - тип переменной? И чему она равна, раз константа. А может все таки не константа.
Самое, наверное, простое при отладке - просмотр состояния переменной. Выведите в дебаг значение i, k, Kol_Block.
И как то криво смотрится, что сперва берем k, а потом все таки сравниваем с Кол_Блок. Отладочный момент наверное?))

Пока предположение, что Кол_Блок все же не константа.

Global_viewer
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 28 дек 2013, 20:24
Имя: Ковалев Антон Русланович
Страна: РФ
город/регион: Екатеринбург
Поблагодарили: 1 раз

С скрипт

Сообщение Global_viewer »

если предполржить что Kol_Block=300, а i имеет размерность в байт, то i всегда будет сбрасываться в нуль при лостижении 255 и цикл зависнет
:ext_book:
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

С скрипт

Сообщение keysansa »

Global_viewer писал(а): 01 май 2023, 15:47 если предполржить что Kol_Block=300, а i имеет размерность в байт, то i всегда будет сбрасываться в нуль при лостижении 255 и цикл зависнет
:ext_book:
Но будет предупреждение при компиляции...

ЗЫ. А зачем организовывать цикл по i, и потом выходить из него по if (те же переменные, что и в цикле), не завершив цикл? Жуть какая-то.
ЗЫЫ. bov, вы же sfpintf делаете. Выведите дополнительно i и k - все станет понятно.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

Global_viewer
здесь недавно
здесь недавно
Сообщения: 38
Зарегистрирован: 28 дек 2013, 20:24
Имя: Ковалев Антон Русланович
Страна: РФ
город/регион: Екатеринбург
Поблагодарили: 1 раз

С скрипт

Сообщение Global_viewer »

keysansa писал(а): 01 май 2023, 19:28 А зачем организовывать цикл по i, и потом выходить из него по if
в любом случае, такой же цикл вверху работает нормально. Ну так заявлено...
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2471
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2121 раз
Поблагодарили: 208 раз

С скрипт

Сообщение keysansa »

Global_viewer писал(а): 01 май 2023, 21:00
keysansa писал(а): 01 май 2023, 19:28 А зачем организовывать цикл по i, и потом выходить из него по if
в любом случае, такой же цикл вверху работает нормально. Ну так заявлено...
В варианте 1 так же прерывание цикла "досрочно". Правда по константе, а не по переменной, которая константа.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

С скрипт

Сообщение stesl »

bov писал(а): 26 янв 2023, 10:48 Кто подскажет причину
А почему в моей машине подтеки какие то с какого то котла, на месте которого пробка слива должна быть?
bov писал(а): 26 янв 2023, 10:48 Script_Action("Algo_Graf",TagPrefix1,"fsp_Block",TagPrefix,DeviceID);
Это что?
bov писал(а): 26 янв 2023, 10:48 k = "Kol_Block"; //переменная из контроллера - константа

for ( i = 0; i <= k; i++)
{
if (i > "Kol_Block") break;
А почему так?
Ответить

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