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

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

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

Post by volotovskyd » Sat Jan 02, 2021 1:01 pm

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

Вот он:

#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: 370
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

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

Post by Rex2701 » Sat Jan 02, 2021 6:36 pm

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: 79
Joined: Mon Aug 13, 2012 2:23 pm

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

Post by volotovskyd » Sat Jan 02, 2021 6:43 pm

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

return TRUE;

Параметр все равно не TRUE. Могут ли скрипты быть отключены где-то в проекте?

volotovskyd
Posts: 79
Joined: Mon Aug 13, 2012 2:23 pm

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

Post by volotovskyd » Sat Jan 02, 2021 9:50 pm

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

Post Reply