| | C O N T E N T S | Products What we have to offer.. | Order Full version NOW Unfortunately in light of the fact that only a small number of SCLA copies have been sold, I have to increase the price of the
software. This software is now $30 hopefully I will be able to make suffucient money to support Vista..This software, can save you many hours in testing serial links. For a professional approach use the detailed results in your commissioning reports. | LATEST NEWS | The SmartBay product range has been released Contract I.T. is going to bring Cabling
Certification found in IP networks to CCTV networks. | CUSTOMER COMMENTS | “I work in the oil and gas industry doing automation engineering and installation. I will use the software to setup and test radio links for data communications to the various oil and gas fields.” Wes Sutton Marathon Oil Company ”The application we are using the program for is to check the character delay and loss rate over an Ethernet/TCP tunnelling system.” Dr. Chris Clotworthy Senior Design Engineer Smart Light Devices Ireland |
|
|  | | | Contract
I.T. Sincerely recommends NOT using Internet Explorer, we feel that you will be much safer if you switch to another browser. Contract I.T. recommends you use Firefox you can download it here. Or if you would prefer to check our recomendation google this topic |
|
|
 | | | Successfully Using Microsoft Visual Basic 6.0 for Serial Communications. | There are a lot of thirdparty tools
that perform the same function as Microsofts MSComm ActiveX Control. One of the reasons for this is the difficulty to get working and lack of documentation that most people experience when they attempt to use the control. In my experience with MSComm I have developed a few simple proceedures for successfully using the control. I have never needed a thirdparty tool, although I’m sure there are some that offer additional features and are better from a performance point of view.
Here is a sample function that works very well for me. Read through the function and then I’ll explain each of the lines below. Setup port function | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Private Function SetupPort(ByRef objCom As MSComm) With objCom .Break = False
.DTREnable = True .EOFEnable = False .Handshaking = comNone .InBufferCount = 0 .InBufferSize = MAX_PACKETSIZE .InputLen = MAX_PACKETSIZE .InputMode = comInputModeText .NullDiscard = False .OutBufferCount = 0
.OutBufferSize = MAX_PACKETSIZE .ParityReplace = Chr(0) .RThreshold = 1 .SThreshold = 0 .Settings = "115200,N,8,1" 'default settings End With End Function | Function description | - Line one is the function declaration, you will notice that I have
used the ByRef option in the faunction argument list, this tells the function that we want to work with MSComm object passed to the function and not a new instance of the object.
- Working with the passed object reference, for you C programmers think of the ByRef objCom as a pointer to the single instance of the object.
- In some cases (old style communications protocols) we may want to communicate a pause or break in communications. This
is rarely used due to it’s simplicity. So in this instance I’ve set the .Break property to false.
- I’ve set the DTREnable to true. This indicates to any connected equipment that the terminal (your PC) is alive and well (and ready to recieve data so make sure you are). This actually causes a physical pin on the serial port to be driven to -12VDC for RS-232C.
- .EOFEnable will cause the OnComm event to fire if the recieved character is an EOF character, this is a specially
designated character in the ASCII table. I’ve disabled it because I have the recieve event OnComm fire when each character is recieved (not the best performance configuration but it works in this simple example and I’ve never had any issues). Also if you rely on the EOF character to terminate your packets and it gets corrupted then you may not see the end of the packet correctly. Also ASCII comms sucks, you want to be able to transfer binary data and ecapsulate it within packets that you know
the structure of. If you do use EOF then you’ll be limited to 7bits per byte.
- This is perhaps the most important setting, i have disable handshaking, because thats how germs are spread, no seriously we want to use a simple three wire cable (GND, TX and RX) we don’t want the hassle of wiring in those other wires especially when our software communications protocol will handle the start and stop of communications, similar to the MAC level in ethernet.
-
This sounds ominous a buffer set to zero! but infact all it means is that your clearing any characters sitting in the objects recieve buffer, although I’m sure microsoft would have coded this into the ActiveX controls initialisation :P
- If you expect your PC to be under 100% load then it may be possible that Windows will miss a character at the serial port (although I’ve never seen it). In my configuration when a single character arrives the OnComm event fires and I retrieve the
character. So the buffer theoretically never gets any fuller than 1 character, but to be safe I set the buffer to be slightly larger than the largest packet I expect to recieve.
- I set the .InputLen to be the same as the .InBufferSize this is a personal preference that I can’t remember why I do it I just know it’s good. Mayby it’s a karma thing I dunno. Specifically it’s the number of characters that are attempted to be retrieved when you use the objects Input method to get all the
recieved characters. No matter you’ll only get what characters are in the buffer, no more no less.
- ComInputModeText works for me ComInputModeBinary doesn’t. If I use a hex editor program to look at the serial data all I’ve got is a bunch of 20h comming in.
- Let us not throw away 00h (00000000b) data instead let us keep it so that our protocol survives and prospers in a land where nohting can be something and indeed is.
-
Use this to clear any character in the output buffer, as we arn’t using handshaking there should be no chars in the buffer but do you trust that your not sending “LAUNCH” to that nuclear submarine your controlling.
- Make the output buffer as large as you biggest packet so when you want to send your nicely structured data packet you can just plonk it into the Output method.
- Unless your using parity (FOR GODS SAKE DON’T USE IT) sorry uhm use CRC if your data integrity is
important. Me I don’t care STOP/GO it’s all the same when controlling large machinery, things have to break sometime you may aswell be there to fix em. Set this property to whatever you want. CHR(0) may do the least damage if you forget or somehow enable parity.
- One is what you want here, now when a character is recieved you’ll know about ok. Set it to zero if you want a full recieve buffer and are planning on missing characters.
-
Zero is cool here we know when chars are sent cause we aren’t using handshaking so they skedaddle as soon as we output em.
- This line is not really relevant unless your serial communications are relevant, duh it’s everything important in one line formatted as a string, what was microsoft thinking?
- Get a VB manual to understand this line
- Like </BODY> in a web page, so are the ends of our functions.
| Ok you got all that?
How you’d use the functionMSComm1.CommPort = 1 ‘I am using COM 1 on my PC SetupPort MSComm1 ‘Now I have setup the port MSComm1.PortOpen = True ‘Now I have opened the port and can output You should trap for errors imediately after the PortOpen method incase the port is opened by another application or does not exist, here is how I do it. If Err.Number = 0 Then
msgbox "Hey it’s open!" Else msgbox "Doh it’s NOT open!” End If Now lets actually send a some data over the serial port MSComm1.Output = "AT" & vbCrLf | DisclaimerAll the information on this page is provided for learning only, I’d expect anyone actually interfacing to equipment to ensure that they are acting in accordance
with relevant Occupational Health and Safety regulations, and the recomendations of the equipment supplier/vender/manufacturer. |
|
|