Кнопки ЗАПОМНИТЬ на экранах этапов - ПОЛНЫЙ БРЕД!
Извините конечно, но Вы понимаете что будет при нажатии на эту кнопку? Захват-06.png
Куда Вы собрались запоминать?
Ведь Вы работаете СРАЗУ с нужными регистрами PFW через индексную адресацию (PSW40) сразу редактируете правильные регистры выбранной детали и выбранного этапа
А я думал, что я так запоминаю в рецепт.
Значит они вообще ненужный элемент? Редактирую сразу регистр, ну да, понял, спасибо.
А как все-таки маску побитно отправить на флешку, чтобы файл читаемый был?
Про макросы я не понял.
Спасибо.
Кнопки (или функции ф.облостей и ф.кнопок) нужны ТОЛЬКО для копирования выбранного (PSW40) рецепта из области памяти рецептов из PFW в ПЛК, или в обратную сторону.
Макросы..
В панели можно использовать макросы написанные на Си, в том числе и для работы с файлами на флешке
Например,
Дамп файла по секторам на экране панели Захват-01.png
Последний раз редактировалось petera; 09.02.2022 в 13:39.
//display a message box about this
PRINT(30,"%s",
" \xcd\xe0\xea\xee\xef\xe8\xf2\xe5\xeb\xfc\x20\x55\x53\x42\x20\xee\xf2\xf1\xf3\xf2\xf1\xf2\xe2\xf3\xe5\xf2\n\n"
" \xcd\xe0\xe6\xec\xe8\x20\xf7\xf2\xee\xe1\xfb\x20\xe7\xe0\xea\xf0\xfb\xf2\xfc\x20\xee\xea\xed\xee");
В глобальном макросе используется макро определение
#define PRINT(...) realdprintf(__VA_ARGS__)
и "самописная" функция
void realdprintf (unsigned delay, char const *format, ...)
Скрытый текст:
Код:
/*
*
* Copyright 2022 Petr Artyukov (PeterA). All rights reserved.
*
*/
#include <stdarg.h>
#define PRINT(...) realdprintf(__VA_ARGS__)
void realdprintf (unsigned delay, char const *format, ...)
{
#define winNo 5000 //Debug window number
#define HidwNo 6000 //Hidden Window number
#define LTOTAL 4 //Number of lines in the debug window
#define CTOTAL 40 //Number of characters in one line of the debug window
#define INPUT PSW[136] //Window control buttons
#define SCRADDR PSW[139] //Initial address of the screen buffer
#define TIC (*(DWORD*) (PSW + 38)) //System timer
#define TABS 8
#define OK 0
#define KbdStatus(bitno) ((INPUT) & (1 << (bitno)))
char *pBuffScr;
char *pBuffPrint = Malloc((LTOTAL -1) * CTOTAL);
BYTE *saveREGS = Malloc(LTOTAL * CTOTAL);
WORD saveREG1, saveREG2;
static int Xpos, Ypos;
register int t, len2;
int len1, len3, dir;
unsigned long tm;
va_list arg;
Xpos = 237;
Ypos = 205;
/* Save working registers */
saveREG1 = INPUT;
saveREG2 = SCRADDR;
/* Calculate the initial address of the screen buffer */
SCRADDR = PSW[10] - LTOTAL * CTOTAL/2; //
pBuffScr = (char*) &PSW[SCRADDR];
/* Save the registers of the screen buffer area */
memcpy(saveREGS, pBuffScr, LTOTAL * CTOTAL);
/* Clear screen buffer */
memset(pBuffScr, ' ', LTOTAL * CTOTAL);
/* Print to screen line #1 */
len1 = sprintf(pBuffScr, " >>>>> DEBUG <<<<<< ");
len2 = CTOTAL + Max(0, len1-CTOTAL);
/* remaining print lines in the buffer */
va_start(arg, format);
len3 = vsnprintf (pBuffPrint, LTOTAL * CTOTAL - len2 - 1, format, arg);
va_end(arg);
pBuffPrint[len3] = '\0';
/* Display buffer on screen */
t= 0;
do {
switch(pBuffPrint[t]) {
case '\a': //Bell
Beep();
break;
case '\t': //Tab
len2 = len2 - len2 % TABS + TABS;
break;
case '\n': //LF
len2 = len2 - len2 % CTOTAL + CTOTAL;
break;
default:
pBuffScr[len2] = pBuffPrint[t];
len2++;
}
t++;
} while (pBuffPrint[t] !=0 && len2 < (LTOTAL * CTOTAL));
/* Call the debug window and control its position */
tm = TIC;
while(!(KbdStatus(OK) || (delay !=0 && (TIC-tm) >= delay*10)) ) {
OpenWindow(winNo, Xpos, Ypos);
INPUT = 0;
Delay(10);
}
CloseWindow(winNo); // Close Window
CloseWindow(HidwNo); // Close hidden Window
/* Restore working registers */
memcpy(pBuffScr, saveREGS, LTOTAL * CTOTAL);
INPUT = saveREG1;
SCRADDR = saveREG2;
/* Deallocate memory blocks */
Free(pBuffPrint);
Free(saveREGS);
}
Для "печати" используются стандартные символьные дисплей с привязкой к регистрам PSW, расположенным в самом конце доступной памяти выделенной под PSW
При этом,ни один регистр PSW не пострадает, т.к. ВСЕ используемые в функции регистры в начале ее работы сохраняются, а после ее завершения - восстанавливаются с прежним содержимым.
Последний раз редактировалось petera; 13.02.2022 в 17:02.
Просмотрел видео, прочитал тему - вот наверное почему я не использую панели овен. В том же w***ke, создать похожее, без таких ухищрений можно без проблем.
"Petera" можно считать экспертом по панелям серии СП, однако я понимаю даже он тут вспотел, изобретая это.