WinCC C-script новый поток

Панели оператора PP/OP/TP/TD/MP.
Программные пакеты ProTool/WinCC flexible, SCADA система WinCC
Post Reply
Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

WinCC C-script новый поток

Post by Usver » Fri Sep 28, 2018 4:21 pm

Здравствуйте Уважаемые форумчане!
Возникла у меня идея запускать некую функцию в wincc 6.2 в новом потоке (не спрашивайте зачем, просто надо!). Как Вы считаете, это возможно выполнить чере CreateThread из kernel32.dll или эта функция не может работать в wincc? Дело в том, что я ее импортирую, а при ее вызове падает script.exe
Пишу так:

Code: Select all

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;
} SECURITY_ATTRIBUTE,  *LPSECURITY_ATTRIBUTE;
#pragma code("kernel32.dll")
void * CreateThread(
  LPSECURITY_ATTRIBUTE   lpThreadAttributes,
  unsigned long               dwStackSize,
  void * lpStartAddress,
  void * lpParameter,
  DWORD                   dwCreationFlags,
  DWORD *                lpThreadId
);
#pragma code()

CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);

}
ThreadFunc - функция в проете, которая имеет вид

Code: Select all

#include "apdefap.h"
void ThreadFunc()
{
//Пока ничего нет, но подразумевается, что будет.
//Но и без ничего не работает!
}
или может как-то по-другому можно?
З.Ы.
Вообще функция д.б. с параметром. Но не работает даже без параметров.

Dfcz
Posts: 875
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: WinCC C-script новый поток

Post by Dfcz » Mon Oct 08, 2018 11:44 am

Ого, попахивает спай....? Удачи в нелегком деле.

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: WinCC C-script новый поток

Post by Usver » Mon Oct 08, 2018 1:54 pm

Dfcz wrote:Ого, попахивает спай....? Удачи в нелегком деле.
Что такое спай? Что Вы имели ввиду? Вообще в проекте есть функция, в которой идет вызов функции в самописной ДЛЛ. Вызов такого плана:

Code: Select all

__object * ob;
ob = __object_create("Имя_объекта");
ob -> FunctionOfThisDll(a,b,c,d);
ob = NULL;
Ну и существует мнение, что на этом месте скрипт.ехе бывает маленько подвисает. Так что никакого "спай" или "спайса" там нет. :)

Dfcz
Posts: 875
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: WinCC C-script новый поток

Post by Dfcz » Mon Oct 15, 2018 9:12 am

Перефразирую известное выражение: это SIENENS детка!
У Сименс безопасность на втором месте... а может на первом... не могу утверждать.
А может быть даже на всех местах и уровнях... параллельно.

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: WinCC C-script новый поток

Post by Usver » Fri Oct 19, 2018 5:49 pm

Оказалось, что проблема была в другой функции, которая записывает в AlarmLoging сообщение. Процесс записи описан в документации ODK через MSRTStartMsgService и ее сопровождающие. Нарисовал функцию с выполнением в новом потоке в DLL на "крестах", и все поехало. (костыль конечно, а что делать, если рантайм без него часто виснет). В общем проблема разрешилась.

Да, кстати, может кто знает как интерпретируется на обычный "С" __object_create? А то найти не могу.

Post Reply