Use communication controls in VC ++ to develop Serial Communication Programs

Source: Internet
Author: User

Use communication controls in VC ++ to develop Serial Communication Programs
Zeng Ming

Abstract:

This article describes how to use communication controls in Visual C ++ 5.0 and provides
A simple and Common Communication Example program written using this control.

Keywords: Serial Communication communication control

With the gradual popularization of Win 95, programmers are more and more willing to program in Win95, and Visual C ++ is becoming the main
Sending tool. However, developing a serial communication program with vc in Win95 is a real headache for programmers.
Not only need to understand many complex API functions, but also need to master multi-threaded programming. Fortunately, what we provide in Visual C ++
Communication Control helps us solve this problem. Through correct use of this control, we can easily compile the required
.

The following is a detailed example. The programming environment of this program is Win95 and Visual C ++ 5.0. This
Programming examples have strong functions. You can select the communication port for transmission and set the parameters of this port.
Including the baud rate, data bit, stop bit, parity and traffic control. It also has a pair of sending and receiving data
Function.

1. embedded communication control in the program

Start visual c ++ 5.0, use MFC Appwizard (exe) to create a project file, and name it commtest,
In step 1 of Appwizard, select a dialog box-based application type (dialog based). in step 2, set ActiveX
The "controls" check box is selected, indicating that the program supports ActiveX controls. All others receive the default settings, and the Appwizard will automatically
Generate an application that uses the dialog box as the main window. Next we will add communication controls to this program. In resource
View to open the dialog box (idd_commtest_dialog) and change it to the displayed dialog box. Note that the Dialog
The language attribute of the box is changed to Chinese (P. r.c ).


Figure 1 dialog box

Click the project menu, select Add to project from the menu, and then click components and controls.
In the displayed dialog box, click registered ActiveX controls, and then select Microsoft communic from the list box.
Ations control, version 5.0, and click OK. Then you will be asked if you want to add the cmscomm class, click OK, and return
You can see that a communication control (such as a phone) is added to the control toolbar, drag it to the dialog box, and note
A new class is added to the project. By viewing the MSComm-class source file MSComm. cpp, we can understand this
The properties and usage of the control. The get... Function can be used to access the current value of this attribute, and set... The function is used
Set the new value of this attribute.

2. Set the communication control property value

In the "Activate communication control properties" dialog box, some important properties and their descriptions are shown in table 1:

Genus
Set Value
Description

Commp ORT
2
Serial Port Number. Generally, Serial Port 1 is used by the mouse, so Serial Port 2 is used.

Inbuffersize
1024
Receiving buffer size

Inputlen
0
Number of bytes read from the receiving buffer, 0 indicates all read

Inputmode
1
Type of received data. 0 indicates the text type, and 1 indicates the binary type.

Outbuffersize
1024
Sending buffer size

Rthreshold
1
Set the oncomm event to be triggered when several characters are received. 0 indicates that no event is generated. 1 indicates that one event is generated every time one character is received.
Events

Sthreshold
0
Set the minimum number of characters allowed in the sending buffer before the oncomm event is triggered. 0 indicates that no data is generated during sending.
Event. 1 indicates that an oncomm event is generated when the sending buffer is empty.

Settings
9600, N, 8, 1
Serial Port parameter settings, in turn for the baud rate, parity (N-no verification, e-even verification, o-odd verification), data digits, stop
Ending digits

Table 1 Serial Port attributes and descriptions

The attribute setting value in the preceding table is the value used in this routine and can be set flexibly as needed. Other attributes can be used
Default Value. For more information, see the online help file.

Communication controls work in a similar way and interrupt mode. When a communication event occurs (such as sending data or receiving data ),
The oncomm event is triggered, and the getcommevent () function is called in the event processing function, and can be determined by returning the value.
This is the type of event, and then the corresponding processing.

3. Main Program Compilation

First, add the corresponding variables and response functions for the controls in the dialog box. Table 2 shows the specific practices:

Control name
Control ID
Corresponding variable or function

Send data edit box
Idc_senddata
M_senddata

Receive data edit box
Idc_receivedata
M _ receivedata

Send button
Idc_send
Onsend ()

Clear button
Idc_clear
Onclear ()

Communication Control
Idc_mscomm
M_comm

Table 2 add controls

Open classwizard and select idc_mscomm. The message that the control can respond to is oncomm. Add and modify the function.
Rename it oncomm () and add code to the function to process serial events. Note that
The problem is that the getinput () function returns a variant variable, while the cstring variable is displayed in the editing box.
Conversion is required. Convert a variant variable to a colesafearray variable, and then convert it to a byte array.
And then convert the array to a cstring variable. This conversion process looks complicated, but it can meet different requirements.
Variable type to display the received data. The main code of this program is added to commtestdlg. cpp, as shown below:

Void ccommtestdlg: onsend ()

{

If (! M_comm.getportopen ())

M_comm.setportopen (true); // open the serial port

Updatedata (true );

M_comm.setoutput (colevariant (m_senddata); // send data

}

Void ccommtestdlg: onclear ()

{

M_receivedata.empty (); // clear the data in the receiving dialog box.

M_senddata.empty (); // clear the data in the send dialog box.

Updatedata (false );

}

Void ccommtestdlg: oncomm ()

{

Variant m_input1;

Colesafearray m_input2;

Long length, I;

Byte data [1024];

Cstring STR;

If (m_comm.getcommevent () = 2) // The receiving buffer contains characters

{

M_input1 = m_comm.getinput (); // read data in the buffer

M_input2 = m_input1; // convert a variant variable to a colesafearray variable.

Length = m_input2.getonedimsize (); // determine the Data Length

For (I = 0; I <length; I ++)

M_input2.getelement (& I, Data + I); // converts data to a byte array.

For (I = 0; I <length; I ++) // converts an array to a cstring variable.

{

Char A = * (char *) (Data + I );

Str. Format ("% C", );

M_receivedata + = STR;

}

}

Updatedata (false); // updates the content of the edit box.

}

Iv. Test Procedure

Now that the program has been written, you can compile and run it. We can do a small experiment to verify the functions of the program. First test you
Serial Port 2 to check whether it works normally. Common dos program comdebug check is available. After confirming that the serial port works properly
The serial line connects the serial port 2 of the two computers and runs the program on the two computers at the same time (you can also use only one microcomputer to separate the Serial Line
2 and 3 are transient, that is, the spontaneous receiving status). In the send dialog box, enter some characters and click the mouse to send them.
Button, you will see the data in the receiving dialog box of another machine, and even Chinese characters can be sent. As you can see,
The communication control can easily compile a serial communication program. However, communication controls are used more in VC than in V
B is much more complicated. To develop more and more flexible use methods, we need to constantly explore and practice.

Experiment results:

Use vspm to obtain
Debugging assertion failed line: 2553

2010-05-09

I wrote a serial communication program using the serial control in MFC, and the following error occurs:

Debug
Assertion failed!
Program :.....
File: olevar. cpp
Line: 2553

For information on how your program can cause an assertion
Failure, see ....

The final result is: m_com.setinputmode (1) is not set );
// 1 indicates retrieving data in binary mode

Change inputmode to 1 in the nature of the telephone tool.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.