⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winclass.cpp

📁 一个完整的RTU程序源码,用DOS平台,支持16串口,在天津港用的很多,8个规约103,modbus,cdt,1801,u4f
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CWindows::mainf9()
{
}

void CWindows::mainpgup() // process key down arrow
{
	if (window_flag) {
		pageno--;
		sigcursor = TRUE;
		UpdateWindow();
	}
}

void CWindows::mainpgdn() // process key down arrow
{
	if (window_flag) {
		pageno++;
		sigcursor = TRUE;
		UpdateWindow();
	}
}

void CWindows::ResetKeyBuf() // reset keyin buffer
{
	keyin_buf.dispkeyflag = keyin_buf.keyinstate = keyin_buf.keyinover = FALSE;
	keyin_buf.count = 0;
}

void CWindows::parakeyin(INT8U key) // get input data to key buffer
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag) {
		switch (menuid) {
			case 0x0200:  case 0x0201:  case 0x0202:  case 0x0203:
				if (!keyin_buf.keyinstate)
					keyin_buf.keyinstate = siginput = TRUE;
				keyin_buf.dispkeyflag = TRUE;	// when displayed make false
				if (keyin_buf.count < keyin_buf.lenlimit)
					keyin_buf.keybuf[keyin_buf.count++] = key;
				if (keyin_buf.count >= keyin_buf.size) {
					keyin_buf.keyinstate = keyin_buf.dispkeyflag = FALSE;
					keyin_buf.count = 0;
				}
				break;
		}
	}
}

void CWindows::KeyDrop() // delete input from key buffer
{
	INT16U menuid = mainmenuno << 8 | itemmenuno;

	if (window_flag) {
		switch (menuid) {
			case 0x0200:  case 0x0201:  case 0x0202:  case 0x0203:
				if (keyin_buf.keyinstate)
					if (keyin_buf.count > 0) {
						keyin_buf.count--;
						keyin_buf.dispkeyflag = TRUE;
					}
		}
		siginput = TRUE;
	}
}

void CWindows::DispKeyInput(INT8U x, INT8U y, INT8U len, INT8U color, BOOLEAN mask)
{
	char i, dislen;
	INT8U s[KEYIN_BUF_SIZE + 1];

	if (keyin_buf.dispkeyflag) {
		keyin_buf.dispkeyflag = FALSE;
		if (keyin_buf.count > len) dislen = len;
		else dislen = keyin_buf.count;

		if (mask) memset(s, '*', dislen);
		else memcpy(s, keyin_buf.keybuf, dislen);

		for (i = 0; i < len - dislen; i++) s[i + dislen] = ' ';
		s[len] = '\0';
		PC_DispStr(x, y, s, color);
	}
}

void CWindows::scrollup(INT8U topx,INT8U topy,INT8U endx,INT8U endy) // screen window scroll up
{
	union REGS r;
	r.h.ah = 6;
	r.h.al = 1;
	r.h.ch = topy;
	r.h.cl = topx;
	r.h.dh = endy;
	r.h.dl = endx - 1;
	r.h.bh = BLUE << 4 | WHITE;
	int86(0x10, &r, &r);
}

void CWindows::hardset() // display hardware check infomation
{
	int i, j;
	tpattern_t pattern;
	static const INT8U *title_name[] = {"NO.", "BOARD", "STATUS", "TEST OK"};
	static const INT8U *item_name1[] = {"PCM-3643(1)", "PCM-3643(2)",
												"PCM-3718", "PCM-3724(P1)", "PCM-3724(P2)"};
	static const INT8U *item_name2[] = {"PCL-746+(1)", "PCL-746+(2)",
												"MIC-2718", "PCL-724(1)", "PCL-724(2)"};

	char temp_posx[]={12, 22, 39, 52};
	char starty = 7;

	if (sigcreat) {
		for (i = 0; i < 4; i++)
			PC_DispStr(temp_posx[i], starty - 2, title_name[i], BLUE << 4 | YELLOW);

		pattern.color = BLUE << 4 | LIGHTRED;

		char *str1 = "MIC2000";
		char *str2 = "PC104";
		char str3[30] = "MACHINE : ";
		if (plattype == MPC104) strcat(str3, str2);
		if (plattype == MPCMIC) strcat(str3, str1);
		PC_DispStr(30, 3, str3, BLUE << 4 | YELLOW);

		for (i = 0; i < 5; i++) {
			pattern.x = temp_posx[0]; pattern.y = starty + i * 2;
			dprintf(pattern, "%u", i + 1);
			if (plattype == MPC104)
				PC_DispStr(temp_posx[1], pattern.y, item_name1[i], BLUE << 4 | LIGHTRED);
			if (plattype == MPCMIC)
				PC_DispStr(temp_posx[1], pattern.y, item_name2[i], BLUE << 4 | LIGHTRED);

//			if ((CardStatusYx >> i) & 0x1) {
				PC_DispStr(temp_posx[2], starty + i * 2, "INSTALLED", BLUE << 4 | WHITE);
				switch (i) {
					case 0:
						for (j = 0; j < _sio1total; j++)
//							if (PortSet[j].state)
								PC_DispChar(temp_posx[3] + j, starty + i * 2, '*', BLUE << 4 | LIGHTRED);
						break;
					case 1:
						for (j = 0; j < _sio2total; j++)
//							if (PortSet[j + _sio1total].state)
								PC_DispChar(temp_posx[3] + j, starty + i * 2, '*', BLUE << 4 | LIGHTRED);
						break;
					case 2:
						PC_DispStr(temp_posx[3], starty + i * 2, "single", BLUE << 4 | LIGHTRED);
						break;
					case 3:
						for (j = 0; j < 3; j++)
//							if ((ParaStatusYx >> j) & 0x1)
								PC_DispChar(temp_posx[3] + j, starty + i * 2, '*', BLUE << 4 | LIGHTRED);
						break;
					case 4:
						for (j = 0; j < 3; j++)
//							if ((ParaStatusYx >> j + 3) & 0x1)
								PC_DispChar(temp_posx[3] + j, starty + i * 2, '*', BLUE << 4 | LIGHTRED);
						break;
				}
			}
/*		else {
				PC_DispStr(temp_posx[2], starty + i * 2, "NONE", BLUE << 4 | WHITE);
				PC_DispStr(temp_posx[3], starty + i * 2, "FAIL", BLUE << 4 | WHITE);
			}
		} */
	}
}


#define PARNO 8

void CWindows::winportset()
{
	if (sigcreat) {
		int i, j;
	char *title[] =
					{"Port1 ", "Port2 ", "Port3 ", "Port4 ",
					 "Port5 ", "Port6 ", "Port7 ", "Port8 ",
					 "Port9 ", "Port10", "Port11", "Port12",
					 "Port13", "Port14", "Port15", "Port16"};
	char *item[] =
					{"Baud", "Data", "Stop", "Parity",
					 "Work", "Protocol", "StartAdd", "EndAdd"};
		INT8U temp_pos[] = {12, 19, 26, 33, 40, 47, 54, 61};
		tpattern_t pattern;
		char startx = 2, starty = 3;

		sigcreat = FALSE;
		for (i = 0; i < PARNO; i++){
			PC_DispStr(startx, starty + i, item[i], BLUE << 4 | LIGHTRED);
			PC_DispStr(startx, starty +(11+i),item[i],BLUE << 4 | LIGHTRED);}

		pattern.color = BLUE << 4 | WHITE;
		for (i = 0; i < PARNO; i++) {
			PC_DispStr(temp_pos[i], starty - 1 , title[i], BLUE << 4 | YELLOW);
			PC_DispStr(temp_pos[i], starty + 10, title[i+8],BLUE << 4 | YELLOW);
			pattern.x = temp_pos[i];
			int temp_ypos[2] = {3,14};
			for(int l = 0; l < 2; l++){
			for(j = 0; j < PARNO; j++)	{
				pattern.y = j + temp_ypos[l];
				switch (j)	{
					case 0:
						dprintf(pattern, "%u", PortSet[i+l*8].Baud);	break;
					case 1:
						dprintf(pattern, "%u", PortSet[i+l*8].DataBit); break;
					case 2:
						dprintf(pattern, "%u", PortSet[i+l*8].StopBit); break;
					case 3:
						if (PortSet[i+l*8].Parity == 1) dprintf(pattern, "EVEN");
						if (PortSet[i+l*8].Parity == 2) dprintf(pattern, "ODD");
						if (PortSet[i+l*8].Parity == 0) dprintf(pattern, "NONE");
						break;
					case 4:
						if (PortSet[i+l*8].isWork) dprintf(pattern, "YES");
						else dprintf(pattern, "NO");
						break;
					case 5:
						dprintf(pattern, "%s", protocol_name[PortSet[i+l*8].Protocol % MAX_PROTOCOL]);
						break;
					case 6:
						dprintf(pattern, "%u", PortSet[i+l*8].DevStartAddr);
						break;
					case 7:
						dprintf(pattern, "%u", PortSet[i+l*8].DevEndAddr);
				} // switch
			} // for (j = 0
			}
		}
	}
}

void CWindows::protocolpar()
{
	if (sigcreat) {
		int i, j;
	char *title[] =
					{"Port1 ", "Port2 ", "Port3 ", "Port4 ",
					 "Port5 ", "Port6 ", "Port7 ", "Port8 ",
					 "Port9 ", "Port10", "Port11", "Port12",
					 "Port13", "Port14", "Port15", "Port16"};
	char *item[] =
					{"Frame_A", "Frame_B", "Frame_C", "Frame_D1",
					 "Frame_D2", "Frame_E"};
		INT8U temp_pos[] = {12, 19, 26, 33, 40, 47, 54, 61};
		tpattern_t pattern;
		char startx = 2, starty = 3;

		sigcreat = FALSE;
		for (i = 0; i < 6; i++){
			PC_DispStr(startx, starty + i, item[i], BLUE << 4 | LIGHTRED);
			PC_DispStr(startx, starty +(11+i),item[i],BLUE << 4 | LIGHTRED);}

		pattern.color = BLUE << 4 | WHITE;
		for (i = 0; i < PARNO; i++) {
			PC_DispStr(temp_pos[i], starty - 1 , title[i], BLUE << 4 | YELLOW);
			PC_DispStr(temp_pos[i], starty + 10, title[i+8],BLUE << 4 | YELLOW);
			pattern.x = temp_pos[i];
			int temp_ypos[2] = {3,14};
			for(int l = 0; l < 2; l++){
			for(j = 0; j < 6; j++)	{
				pattern.y = j + temp_ypos[l];
				switch (j)	{
					case 0:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]);	break;
					case 1:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]); break;
					case 2:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]); break;
					case 3:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]); break;
					case 4:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]); break;
					case 5:
						dprintf(pattern, "%u", ProtocolSet[i+l*8][j]); break;
				} // switch
			} // for (j = 0
			}
		}
	}
}

void CWindows::datasourceset()
{
	if (sigcreat) {
		int i,j;
		INT8U *item_name[4][2] =
										{{"TOTAL_YX ", "BOARD_YX "},
										 {"TOTAL_YC ", "BOARD_YC "},
										 {"TOTAL_YM ", "BOARD_YM "},
										 {"TOTAL_YK ", "BOARD_YK "}};

		INT8U temp_pos[] = {6, 18};
		tpattern_t pattern;
		char starty = 5;

		sigcreat = FALSE;
		pattern.color = BLUE << 4 | YELLOW;
		for (i = 0; i < 4; i++) {
			for (j = 0; j < 2; j++) {
				pattern.y = starty + i * 4;
				pattern.x = temp_pos[j];
				PC_DispStr(pattern.x, pattern.y - 1, item_name[i][j], BLUE << 4  | LIGHTRED);}
				pattern.x = 6;
				switch (i) {
					case 0:
						dprintf(pattern, "%u         %u", _TotalYx, _TotalBDYx);
						break;
					case 1:
						dprintf(pattern, "%u          %u", _TotalYc, _TotalBDYc);
						break;
					case 2:
						dprintf(pattern, "%u           %u", _TotalYm, _TotalBDYm);
						break;
					case 3:
						dprintf(pattern, "%u          %u", _TotalYk, _TotalBDYk);
						break;
			}
		}
	}
}

BOOLEAN CWindows::IsPolling(INT8U portno)
{
	BOOLEAN result;
	switch (PortSet[portno].Protocol) {
		case NEW_BB_CDT:
		case DISA:
		case DCJZ:
			result = FALSE;
			break;
		case LFP:
		case IEC101:
		case IEC102:
		case IEC103:
		case GPS:
		case DL645:
		case DCMODBUS:
		case MODBUS:
		case GST:
		case STMODBUS:
		case TTC31X:
		default:
			result = TRUE;
			break;
	}
	return (result);
}

int CWindows::ProcessInt()
{
	int temp = 0;
	sscanf(keyin_buf.keybuf, "%d", &temp);
	return (temp);
}

INT16U CWindows::ProcessWord()
{
	INT16U temp = 0;

	sscanf(keyin_buf.keybuf, "%u", &temp);
	return (temp);
}

void CWindows::checktime()
{
	int i;
	INT8U lenlimit;
	tpattern_t pattern;
	INT8U *title_name[] = {"YEAR     :", "MONTH    :", "DAY      :", "HOUR     :",
												"MINUTE   :", "SECOND   :", "CHECK?   :"};
	char startx = 30, starty = 7;

	if (sigcreat) {
		check_time.checktimeflag = FALSE;
		GetClock(&check_time.clk);
		for (i = 0; i < 7; i++)
			PC_DispStr(startx, i + starty, title_name[i], BLUE << 4 | LIGHTRED);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -