TFT монитор SCD 1597-K - управление LEDs из WinCC
Виктор; 4.6.03

Есть TFT монитор SCD 1597-K (с итегрированной клавой и мышей).

Проблема: как управлять LEDs из WinCC?В инструкции к устройству описан формат специальной команды, которую нужно послать на клаву. Но как послать эту команду?

Re: TFT монитор SCD 1597-K - управление LEDs из WinCC
Eugene; 11.6.03

Прочитал ответ на Automation and Drives Service & Support


Создаешь скрипт:

// Incorporating the DLL:
#pragma code("tastdr32.dll")

// Prototype fur DLL function CallTastdrv:
int __cdecl CallTastdrv(int Cmd, void* pCmdPara);
// Keyboard controller command for LED sides:
#define TASTCON_LED_CMD 0xD6
// SwitchLed: set LED <LedNo> to mode <Mode>
// LedNo: 1 to 39 (see table)
// Mode: 0=off, 1=on, 2=blinking
// Return: Status=0: OK; Status!=0: Error
int SwitchLed(BYTE LedNo, BYTE Mode)
{
BYTE Para[3];
int Status;
BYTE SetNumber;
BYTE LedNumber;
// Determine LED group and –Number:
SetNumber = (BYTE) ((LedNo - 1) / 16);
LedNumber = (BYTE) (((LedNo - 1) % 16) + 1);
Para[0] = SetNumber;
Para[1] = LedNumber;
Para[2] = Mode;
// Call DLL function:
Status = CallTastdrv(TASTCON_LED_CMD, Para);
return Status;
}

Номера LED:
F1 - 34
F2 - 35
F3 - 33
F4 - 8
F5 - 5
F6 - 7
F7 - 3
F8 - 1
F9 - 6
F10 - 23
F11 - 30
F12 - 31
F13 - 29
F14 - 27
F15 - 28
F16 - 25
F17 - 26
F18 - 37
F19 - 38
F20 - 36
S1 - 16
S2 - 13
S3 - 15
S4 - 12
S5 - 10
S6 - 14
S7 - 9
S8 - 11
S9 - 18
S10 - 20
S11 - 22
S12 - 17
S13 - 19
S14 - 24
S15 - 21
S16 - 2
ACK - 32
HELP - 4
TEMP - 39

Пример использования в событии OnClick:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SwitchLed (11, 1); // Switch on LED with key S8
if (SwitchLed (1, 2) != 0) // Set LED to blinking with key F8...
{ // ...with error handling
}
}

Re: TFT монитор SCD 1597-K - управление LEDs из WinCC
Виктор; 13.6.03

Пробовал скрипт - не работает(функция SwitchLed возвращает код ошибки =13). В Automation and Drives Service & Support в шапке к этому скрипту указаны Panel PC - PC670, PC870. Может работает только для них ?

Пробовал метод перебора для константы #define TASTCON_LED_CMD 0xD6 (прогнал от 0-10000, дальше не пробовал. Та же ошибка.)
Пробовал даже из под DOSа писать в порт клавы указанную в инструкции специальную команду - не работает (циклы для паузы):
outp(0x60,0xea);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);
for(i=0; i<4000; i++);
outp(0x60,0x46);