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

📄 wab_uart.c

📁 LabwindowsCVI编写的一个串口通信小程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
	SetCtrlVal (config_handel,CONFIG_BAUD_RATE,baudrate);
	SetCtrlVal (config_handel,CONFIG_DATA_BITS,data_bits);
	SetCtrlVal (config_handel,CONFIG_PARITY,parity);
	SetCtrlVal (config_handel,CONFIG_STOP_BITS,stop_bits);
	SetCtrlVal (config_handel,CONFIG_INPUTQLEN,inputq);
	SetCtrlVal (config_handel,CONFIG_OUTPUTQLEN,outputq);
	SetCtrlIndex (config_handel, CONFIG_PORT, portindex);
}

/*---------------------------------------------------------------------------*/
/* Display error information to the user.                                    */
/*---------------------------------------------------------------------------*/
void DisplayRS232Error (void)
{
    char ErrorMessage[200];
    switch (RS232Error)
        {
        default :
            if (RS232Error < 0)
                {  
                Fmt (ErrorMessage, "%s<RS232 error number %i", RS232Error);
                MessagePopup ("RS232 Message", ErrorMessage);
                }
            break;
        case 0  :
            MessagePopup ("RS232 Message", "No errors.");
            break;
        case -2 :
            Fmt (ErrorMessage, "%s", "Invalid port number (must be in the "
                                     "range 1 to 8).");
            MessagePopup ("RS232 Message", ErrorMessage);
            break;
        case -3 :
            Fmt (ErrorMessage, "%s", "No port is open.\n"
                 "Check COM Port setting in Configure.");
            MessagePopup ("RS232 Message", ErrorMessage);
            break;
        case -99 :
            Fmt (ErrorMessage, "%s", "Timeout error.\n\n"
                 "Either increase timeout value,\n"
                 "       check COM Port setting, or\n"
                 "       check device.");
            MessagePopup ("RS232 Message", ErrorMessage);
            break;
        }
}

void RD_ComData(int portNumber, int eventMask, void *callbackdata)
{
	data_will_rd = GetInQLen (com_port);
	bytes_read = ComRdTerm (com_port, read_data, data_will_rd,10);
	/*  Copy subset of read_data into tbox string for display.
	ComRdTerm does not automatically put null byte after
	number of bytes read into read_data string. */
	if(display_message == 1) {
		CopyString (tbox_read_data, 0, read_data, 0, bytes_read);
		SetCtrlVal (mWindow, M_WINDOW_RCV_BOX, tbox_read_data);
	}
	RS232Error = ReturnRS232Err ();
	if (RS232Error)
		DisplayRS232Error ();
}

void CVICALLBACK Get_COM_Status (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	if(portopen == 1) {
		com_status = GetComStat (com_port);
		DisplayComStatus ();
	} else {
		MessagePopup ("RS232 Message" , "The Port is not open!");
	}
}

void DisplayComStatus ()
{
    com_msg[0] = '\0';
    if (com_status & 0x0001)
        strcat (com_msg, "Input lost: Input queue"
                " filled and characters were lost.\n");
    if (com_status & 0x0002)
        strcat (com_msg, "Asynch error: Problem "
                "determining number of characters in input queue.\n");
    if (com_status & 0x0010)
        strcat (com_msg, "Parity error.\n");
    if (com_status & 0x0020)
        strcat (com_msg, "Overrun error: Received"
                " characters were lost.\n");
    if (com_status & 0x0040)
        strcat (com_msg, "Framing error: Stop bits were not received"
                " as expected.\n");
    if (com_status & 0x0080)
        strcat (com_msg, "Break: A break signal was detected.\n");
    if (com_status & 0x1000)
        strcat (com_msg, "Remote XOFF: An XOFF character was received."
                "\nIf XON/XOFF was enabled, no characters are removed"
                " from the output queue and sent to another device "
                "until that device sends an XON character.\n");
    if (com_status & 0x2000)
        strcat (com_msg, "Remote XON: An XON character was received."
                "\nTransmisson can resume.\n");
    if (com_status & 0x4000)
        strcat (com_msg, "Local XOFF: An XOFF character was sent to\n"
                " the other device.  If XON/XOFF was enabled, XOFF is\n"
                " transmitted when the input queue is 50%, 75%, and 90%\n"
                " full.\n");
    if (com_status & 0x8000)
        strcat (com_msg, "Local XON: An XON character was sent to\n"
                " the other device.  If XON/XOFF was enabled, XON is\n"
                " transmitted when the input queue empties after XOFF\n"
                " was sent.  XON tells the other device that it can \n"
                " resume sending data.\n");
    if (strlen (com_msg) == 0)
        strcat (com_msg, "No status bits are set.");
    MessagePopup ("RS232 Message", com_msg);
}

int CVICALLBACK Rcv_Box_Callback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int key_vk;
	int key_asc;
	switch (event)
	{
		case EVENT_COMMIT:
			break;
		case EVENT_KEYPRESS:
			if(portopen == 1) {
				key_asc = eventData1 & VAL_ASCII_KEY_MASK;
				key_vk = eventData1 & VAL_VKEY_MASK;
				if(key_vk == 0x0500)
					ComWrtByte (com_port, 0x0d);
				else if(key_vk == 0x0200)
					ComWrtByte (com_port, 0x08);
				else if(key_vk == 0x0300)
					ComWrtByte (com_port, 0x1b);
				else 
					ComWrtByte (com_port, key_asc);
			}
			break;
		case EVENT_RIGHT_CLICK:
			RunPopupMenu (rc_menubar_handle, R_C_BAR_rightclick, mWindow, eventData1, eventData2, 0, 0, 0, 0);
			break;
	}
	return 0;
}

/////////////////////////////////////////////////////////////
//选择一个文件发送
//功能还未实现
/////////////////////////////////////////////////////////////
void CVICALLBACK Send_File (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	char pathname[MAX_PATHNAME_LEN];  
	FileSelectPopup ("", "*.txt", "*.txt", "WAB : Send File", VAL_LOAD_BUTTON, 0, 0, 1, 0, pathname);
}

/////////////////////////////////////////////////////////////
//装载LED控制面板
//装载同时熄灭所有灯
/////////////////////////////////////////////////////////////
void CVICALLBACK LED_Test (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	led_handel = LoadPanel (mWindow, "wab_uart.uir", LED_PANEL);
	InstallPopup (led_handel);
	display_message = 0;
	if(portopen == 1) {
		ComWrt(com_port, ledoff, 6);
		ComWrtByte (com_port, 0x0d);//enter
		led1_flag = 1;
		led2_flag = 1;
		led3_flag = 1;
	}
}

/////////////////////////////////////////////////////////////
//关闭LED面板
/////////////////////////////////////////////////////////////
int CVICALLBACK LED_Callback (int panel, int event, void *callbackData,
		int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_GOT_FOCUS:

			break;
		case EVENT_LOST_FOCUS:

			break;
		case EVENT_CLOSE:
			if(portopen == 1) {
				ComWrt(com_port, ledp, 4);
				ComWrtByte (com_port, 0x0d);//enter
			}
			DiscardPanel (led_handel);
			display_message = 1;
			break;
		case EVENT_RIGHT_CLICK:
			
			break;
	}
	return 0;
}

/////////////////////////////////////////////////////////////
//控制LED灯状态的变化
/////////////////////////////////////////////////////////////
//点亮或者熄灭LED1
int CVICALLBACK LED1_OP (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(portopen == 1) {
				if(led1_flag == 1) {
					led1_flag = 0;
					ComWrt(com_port, led1, 4);
					ComWrtByte (com_port, 0x0d);//enter
				} else {
					led1_flag = 1;
					ComWrt(com_port, ledoff, 6);
					ComWrtByte (com_port, 0x0d);//enter
				}
				led2_flag = 1;
				led3_flag = 1;
			} else {
				MessagePopup("RS232 Message","The COM is not open!");
			}
			break;
	}
	return 0;
}

//点亮或者熄灭LED2 
int CVICALLBACK LED2_OP (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(portopen == 1) {
				if(led2_flag == 1) {
					led2_flag = 0;
					ComWrt(com_port, led2, 4);
					ComWrtByte (com_port, 0x0d);//enter
				} else {
					led2_flag = 1;
					ComWrt(com_port, ledoff, 6);
					ComWrtByte (com_port, 0x0d);//enter
				}
				led1_flag = 1;
				led3_flag = 1;
			} else {
				MessagePopup("RS232 Message","The COM is not open!");
			}
			break;
	}
	return 0;
}

//点亮或者熄灭LED3 
int CVICALLBACK LED3_OP (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(portopen == 1) {
				if(led3_flag == 1) {
					led3_flag = 0;
					ComWrt(com_port, led3, 4);
					ComWrtByte (com_port, 0x0d);//enter
				} else {
					led3_flag = 1;
					ComWrt(com_port, ledoff, 6);
					ComWrtByte (com_port, 0x0d);//enter
				}
				led1_flag = 1;
				led2_flag = 1;
			} else {
				MessagePopup("RS232 Message","The COM is not open!");
			}
			break;
	}
	return 0;
}

//让LED1,LED2,LED3跑马灯运行
int CVICALLBACK LED_PAO (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			if(portopen == 1) {
				ComWrt(com_port, ledp, 4);
				ComWrtByte (com_port, 0x0d);//enter
				led1_flag = 1;
				led2_flag = 1;
				led3_flag = 1;
			} else {
				MessagePopup("RS232 Message","The COM is not open!");
			}
			break;
	}
	return 0;
}

void CVICALLBACK EnglishCallback (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	int menubar_handle;
	if(language_flag == 2)
		return;
	language_flag = 2;
	menubar_handle = GetPanelMenuBar(mWindow);
	DiscardMenuBar (menubar_handle);
	menubar_handle = LoadMenuBar (mWindow, "wab_uart.uir", rs232_menu);
}

void CVICALLBACK ChineseCallback (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	int menubar_handle;
	if(language_flag == 1)
		return;
	language_flag = 1;
	menubar_handle = GetPanelMenuBar(mWindow);
	DiscardMenuBar (menubar_handle);
	menubar_handle = LoadMenuBar (mWindow, "wab_uart.uir", Menu_CHN);
}

void CVICALLBACK visable_menu (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	SetPanelAttribute (mWindow, ATTR_MENU_BAR_VISIBLE, 1);  
	SetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, 1);
}

void CVICALLBACK hide_menu (int menuBar, int menuItem, void *callbackData,
		int panel)
{
	SetPanelAttribute (mWindow, ATTR_MENU_BAR_VISIBLE, 0);  
	SetPanelAttribute (mWindow, ATTR_TITLEBAR_VISIBLE, 0);
}

⌨️ 快捷键说明

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