Побитное сравнение в С-скрипте в TIA Portal v16

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
volotovskyd
Posts: 83
Joined: Mon Aug 13, 2012 2:23 pm

Побитное сравнение в С-скрипте в TIA Portal v16

Post by volotovskyd »

Здравствуйте.
Подкинул С-скрипт для одного из параметров объекта.

Вот он:

#include "GlobalDefinitions.h"
BOOL VisibleValue(char* screenName, char* objectName, char* propertyName)
{
#define tag "Ack_maxlevels_CFK1"

if (tag & 0x00010001)
return 1;
else
return 0;
}


В WinCC 7.4 такое прокатывало. В TIA не работает. tag - 32-битное двойное слово. Нужно при отличных от нуля нулевом и 16-м бите вернуть TRUE. Где косяк, не пойму. Пробовал и GetTagDword(tag) - все равно.
Rex2701
Posts: 374
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Побитное сравнение в С-скрипте в TIA Portal v16

Post by Rex2701 »

volotovskyd wrote: Sat Jan 02, 2021 1:01 pmВ WinCC 7.4 такое прокатывало. В TIA не работает.
Не могло оно в классике 7.4 прокатить. Сам подставь define внутрь if:

Code: Select all

if ("Ack_maxlevels_CFK1" & 0x00010001)
Ну бред же. Поэтому GetTagDWord обязателен.
Почему не работает - надо дебажить в отдельный I/O Field. Сначала чистое значение тега, потом значение с маской.
volotovskyd
Posts: 83
Joined: Mon Aug 13, 2012 2:23 pm

Re: Побитное сравнение в С-скрипте в TIA Portal v16

Post by volotovskyd »

Оставляю в скрипте только

return TRUE;

Параметр все равно не TRUE. Могут ли скрипты быть отключены где-то в проекте?
volotovskyd
Posts: 83
Joined: Mon Aug 13, 2012 2:23 pm

Re: Побитное сравнение в С-скрипте в TIA Portal v16

Post by volotovskyd »

Решено.
Почему-то скрипт не выполняется, когда в настройках триггера скрипта выбрана РЕКОМЕНДУЕМАЯ опция "Автоматически вычислить триггер". Выбрал вручную время триггера - все заработало. При этом VB-скрипт почему-то работает с настройками триггера по-умолчанию.