Before you can correctly configure WinWedge to parse and filter data received from your serial device, you must first have a complete understanding of the data that your device transmits. You should also be able to recognize what parts of the data are important to you and also completely understand what features of WinWedge can be used to manipulate your data. To use WinWedge effectively, you must think of each input from your device as a record of information containing one or more specific fields of data. The next step is to decide what features of WinWedge can be used to consistently separate each data record from the next and also what features can be used to separate or parse individual data fields within a record from the next field. Finally you need to identify which fields within each record are important to your application and which fields should be removed or ignored.
The best place to start is to refer to the users manual for the device that you are using. The users manual should have a section that describes the structure and contents of all data that can be outputted from the device. If you do not have a users manual for your device or if the output data structure is not described, you can use the Port-Analyze dialog box in WinWedge or the HyperTerminal program that is provided with Windows to manually analyze the output from your device by actually viewing the data that is transmitted from it.
When you configure WinWedge for a particular device you must define the input record structure for your serial data to WInWedge by selecting "Input Data Record Structure" from the Define menu. When defining the input record structure, you specify a "Start Of Record Event", an "End Of Record Event" and a general record structure for each data record (i.e. single field records, multiple delimited fields, or multiple fixed length fields).
With some devices, the record structure may be immediately obvious. For example, the following data record contains three numeric data fields delimited by commas and terminated by a carriage return-linefeed pair:
For this type of data record, you might select "Any Character Received" as the Start Of Record Event and "Carriage Return or CrLf Received" as the End Of Record Event and for the Record Structure you would choose "Multiple Delimited Data Fields" and specify that there are three data fields per record with a comma delimiter separating each field.
Note: The <CrLf> above refers to a carriage return and a linefeed character. A carriage return (Cr) will appear in the "Analyze" window in the Wedge as a musical note and a linefeed (Lf) will appear as a small rectangle with a circle inside it.
Other devices may output data with a record structure that is less obvious than the example above. Consider the following two possible (different) output records transmitted from one particular laboratory instrument:
The two records appear similar in that they both are terminated by a carriage return-linefeed and they both seem to contain multiple delimited data fields. A minor problem with the above two records is that they both contain a different number of data fields. Another complication is that they seem to contain both a comma and one or more asterisks as delimiter characters. In the first record it appears that we have four data fields:
"Sample#1", "213", "32" and "23"
In the second record it appears that we have seven data fields:
"Sample#2", "215", "437", "141", "797", "89" and "56"
There are actually several ways to configure the Wedge to correctly parse both records in the above example. The most elegant method is to use the "Pre-Input Character Translation Table" to modify the delimiters so that they are all the same. For example, we could translate all asterisks to commas to end up with the two records shown below:
Now both records obviously have multiple, delimited, data fields with a carriage return-linefeed signaling the end of each record. We now determine the maximum number of fields in a record by adding up the number of delimiters in each record and adding one. (i.e. the first record has 11 fields and the second record has 13 fields therefore the maximum number of data fields is 13).
Now, when you define the record structure in WinWedge you would select "Any Character Received" as the Start Of Record Event and "Carriage Return or CrLf Received" as the End Of Record Event and for the Record Structure you would choose "Multiple Delimited Data Fields" and specify that the maximum number of data fields per record is 13 with a comma delimiter separating each field.
When parsing records with multiple delimited data fields, if you choose a space character as your delimiter, then consecutive spaces would be treated as a single delimiter. Therefore, in the above example, if instead of translating asterisks to commas, you were to translate both commas and asterisks to spaces, and then you chose the space character as your delimiter, you would effectively end up with the two records shown below with each field now separated by a single (space) delimiter:
Sample#1 213 32 23 <CrLf> Sample#2 215 437 141 797 89 56<CrLf>
Suppose you had a device that normally sent its output to a serial printer in the following manner with more than one line of data:
Device# Height Width Length <CrLf> --------------------------------------------------------- <CrLf> 1 23 12 24 <CrLf> 2 27 13 8 <CrLf> 3 27 13 9 <CrLf> 4 27 13 8 <CrLf> --------------------------------------------------------- <CrLf> <FF>
(<CrLf> represents a carriage return-linefeed and <FF> represents the form feed character)
You can still think of the entire output shown above as a single record even though it contains several lines of data or you can think of each individual line as a complete record. (In fact, you could even think of each word or number outputted from the device as a complete, single field, data record).
Again, there are hundreds of different ways to parse the entire output from the device using the different features available in WinWedge.
If you wanted to capture only the lines with numeric data and parse each of these lines into records with four fields, one way to accomplish this would be to specify the "Start Of Record Event" as "Numeric Character Received" and then specify the "End Of Record Event" as "Carriage Return or CrLf Received". Finally you would define the record structure as "Multiple Delimited Data Fields" with four fields per record and a space as the delimiter character. Because you chose "Numeric Character Received" as the "Start Of Record Event" and because there are no numeric characters in the first, second, seventh and eighth lines of data, these lines would be ignored.
If you wanted to capture the numeric data as above but with all 16 numbers in one record, you could again specify the "Start Of Record Event" as "Numeric Character Received" and then specify the "End Of Record Event" as "Special Character Received" and select the Dash ("-") character as the special character . Next, using the Pre-Input Character Translation Table, you would translate all carriage returns and linefeeds to spaces and finally you would define the record structure as "Multiple Delimited Data Fields" with 16 fields per record and the space character as the delimiter.
Once you understand all of the features provided in WinWedge, you can get very creative with how you deal with the data from your instruments.
The important points to remember are that WinWedge always waits until the selected "Start Of Record Event" occurs before it starts reading in any data after which it keeps reading in characters until the specified "End Of Record Event" occurs. When the "End Of Record Event" occurs, the Wedge takes the data record that it just received and parses it according to the definition of the Record Structure that you selected (i.e. Single Field, Multiple Delimited Fields or Multiple Fixed Length Fields). For each field that you have defined, WinWedge applies the chosen field Filter, Math Function and Format Expression. Finally the Wedge passes each field to the target application in sequence sending each field followed by the field's "Postamble" that you defined.
In many cases you could define the structure of your input data in many different ways. For example if your device transmitted the following data in bursts with some time between bursts, you could define the "End Of Record Event" as either "Carriage Return or CrLf Received" or as "Time Delay Between Records".
1,23,12,24<CrLf> 2,27,13,8<CrLf> 3,27,13,9<CrLf>
If you specified "Carriage Return or CrLf Received" as the "End Of Record Event" then WinWedge would see the data as three records with four fields per record.
If you specified "Time Delay Between Records" and also used the "Pre-Input Translation Table" to translate carriage returns to commas and linefeeds to "Nul" or "Ignore", then the data would appear to the Wedge as follows:
In other words you can think of the original data above as either three records containing four fields each or as a single record with 10 fields.
Again, as long as you understand the data from your serial device and have a clear understanding of the full capabilities of WinWedge, you can transform almost any serial data collection problem into an extremely simple task.