Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Мониторы Реального Времени / Real Time Monitors » Завершение работы

   
Автор / Author Тема / Topic: Завершение работы
Elias
Forum Member / Участник форума
Участник № / Member № 636


Icon 4 отправлено / posted      Профиль для / Profile for Elias           Редактировать/удалить сообщение / Edit/Delete Post 
Как правильнее произвести выключение компьютера из Профайлера по команде оператора
Сообщения / Posts 39 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Штатной функции нет. Как решение - можно встроить пользовательский FBD на VС++ как DLL, которым можно как локальный, так и удаленный ПК выключать (или перезагружать) по команде оператора. А уж как Вы им управлять будете - можно с графической консоли, можно автоматом в самой программе на FBD.
Если сможете собрать DLL сами - могу привести исходный код на C++.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 4 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Всем кто не знаком с С++ думаю будет полезен уже готовый FBD-блок. [fun / веселый]
Данная DLL может быть использована как FBD-блок в программах на FBD в ТМ 5-й версии. Позволяет осуществлять перезагрузку или выключение локального ПК в различных режимах.
Более подробное описание в архиве.
http://www.tracemode.ru/ru/download/tm5/resetfbd.zip

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Elias
Forum Member / Участник форума
Участник № / Member № 636


Icon 5 отправлено / posted      Профиль для / Profile for Elias           Редактировать/удалить сообщение / Edit/Delete Post 
Вышлите, пожалуйста, исходный код на VC++.
Сообщения / Posts 39 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 6 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Держите - это исходник данной DLL на VC++:

code:
 
#include <string.h>
#include <windows.h>

__declspec(dllexport) int FBD_DLL( float*, float*, int*, int* );
__declspec(dllexport) void zFBD_DLL_info( void* );
__declspec(dllexport) void zFBD_DLL_varname( char* );

// Структура описывающая FBD-модуль

typedef struct
{
int q_in; // Количество входов
int q_out; // Количество выходов
int q_int; // Зарезервировано
int type; // Номер в списке функциональных разделов.
// Должно быть равно 17
char name[8]; // Короткое имя для вывода на экран
char fname[8]; // Полное имя
} DO_DEFAULT;

// Тело FBD-модуля
int FBD_DLL( float *in, // Указатель на массив входов
float *out, // Указатель на массив выходов
int *l, int *rl ) // Зарезервировано
{
bool AppClose, Reboot;

if (in[0]==1){
AppClose=FALSE;
Reboot =FALSE;
}
if (in[0]==2){
AppClose=TRUE;
Reboot =TRUE;
}
if (in[0]==3){
AppClose=TRUE;
Reboot =FALSE;
}
if (in[0]==4){
AppClose=FALSE;
Reboot =TRUE;
}
if (in[0]>0){

HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure

BOOL fResult; // system shutdown flag

// Get the current process token handle so we can get shutdown
// privilege.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
out[0]=1;
//printf("OpenProcessToken failed.\n");

// Get the LUID for shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)
out[0]=2;
//printf("AdjustTokenPrivileges enable failed.\n");

// Display the shutdown dialog box and start the time-out countdown.

fResult = InitiateSystemShutdown(
"", // shut down local computer
"This PC will be shutdown now.", // message to user
(unsigned int)in[1], // time-out period
AppClose, // ask user to close apps
Reboot); // reboot after shutdown

if (!fResult)
{
out[0]=3;
//printf("InitiateSystemShutdown failed.\n");
}

// Disable shutdown privilege.

tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
{
out[0]=4;
//printf("AdjustTokenPrivileges disable failed.\n");
}

out[0]=0;

}

return 0;
}
// Формирует указатель на описание FBD-модуля
void zFBD_DLL_info( void *buf )
{
DO_DEFAULT *dd;
dd=(DO_DEFAULT *)buf;

strcpy( dd->name, "Reset" );
strcpy( dd->fname, "Reset" );
dd->q_in = 3;
dd->q_out = 1;
dd->type = 17;
dd->q_int = 0;
}
// Формирует указатель на имена входов и выходов.
// На каждое имя отводится 8 байт
void zFBD_DLL_varname( char *varname )
{
strcpy( varname+0, "RUN" );
strcpy( varname+8, "RCMD" );
strcpy( varname+16, "TM" );
strcpy( varname+24, "RES" );
}


Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2