I am having a problem I have always had with MSCOMM32. If I did not have the correct baud rate set for the control on the form it is on, I can not change it programmically. I can set me.mscomm.settings = "19200,n,8,2" all I want but if on the form it is set for "115200,n,8,2", it does not change.
So, I thought I would give SCOMM32 a try; it is installed.
When I try to add the activeX control to the toolbox, I get a "Name conflicts with existing module, project, or object library" error. I haven't figure out why yet.
Even if I have the settings on the form set to "19200,n,8,2" and later perform a "Me.comRS232.Settings = Serialsetup", it will no long communicate. If I do not do that, with the 19200,n,8,2 settings on the form, it communicates just fine.
Dave
Last edited by daveyk021; Dec 3rd, 2022 at 01:06 PM.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Yes, but not from the computer. I remember a few month ago have both MSCOMM and SCOMM32 on the same form under different names just fine, BUT I believe that was in office VBA, not VB6.
There is no reference to MSCOMM or SCOMM in this project other than on the main form and in the main code. This is a new project.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
I recreated the VPN from scratch importing the form and all the modules. That seemed to work. A weird thing, my main form (only form is MAIN) and with the new project, it would not let me run or compile as long as the form name was Main. All my existing projects have a form named Main and work just fine.
Anyway, I did get SCOMM32x.ocx as a control.
MSCOMM32, with the exact same settings generates an _OnComm event #2 went data is received. SCOMM32X does not generated and ON_COMM event with the #2. It only seems to generate an event #1, which is a transmit event; so I gave up on SCOMM32X.
I still can not programmically change the baud rate using the settings. As soon as I change the settings, programmically, the control ceases to work.
So if the project is going to support 3 or 4 instruments each with their own baud rates, I guess I will need 3 or 4 copies of the control all preset to the baud rate needed and talk to the control based on the instrument being tested. That sucks.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by dilettante
Just tried it. No problem assigning Settings a different value at run time from the value it was given at design time.
Are you using VB6 Service Pack 6 or not?
VB6.0 (SP6)
I've had this issue since I started using MCCOMM32.OCX back around 2006 on various computers.
me.mscomm1.settings = "115200,n,8,2"
and it never communicates again. If it is set that way on the form, as soon as I address settings programmically, the ocx would never communicate again. Well it might, but doesn't generate an _oncomm event of 2. I receive all data through the _oncomm event.
Funny this is, today, I could not get SCOMM32x to generate an _oncomm event of 2 not matter what I tried, so I went back to MSCOMM32.
Now I also have GLOBLMGR.DLL referenced for GPIB/USB communications with test equipment. I doubt that is interfering, but I have never used MSCOMM32 without also referencing GLOMGR.DLL.
I am tired and heading up right now and will continue this fight tomorrow.
BTW, currently, I have two instances of MSCOMM32 on the same for and reference each as a control. One is referenced set at 115200 and the other at 19200 baud. Believe it or not, that works fine. But, I have others I want to use this new tool that communicate at 57600, others at 9600 baud. That's two more speeds I need off the top of my head.
It is not real critical since i figured out a work-around, but it has always stumped me, if I am incorrectly programmically changing the parameter. I was tempted to buy this book: https://www.amazon.com/Visual-Basic-.../dp/1890422282 , but at $120, I doubt it. I have been doing serial communications, with instruments under test, since 2006 and controlling test equipment with the GPIB, and am pretty good at it, except for this one issue.
I suspect, I am doing something stupid, but it is damn difficult to google FULL examples of how to do it. Sure, it is talked about, and even on microsoft's web site. Changing the setting has never worked for me.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by daveyk021
It is not real critical since i figured out a work-around, but it has always stumped me, if I am incorrectly programmically changing the parameter. I was tempted to buy this book: https://www.amazon.com/Visual-Basic-.../dp/1890422282 , but at $120, I doubt it. I have been doing serial communications, with instruments under test, since 2006 and controlling test equipment with the GPIB, and am pretty good at it, except for this one issue.
The 3rd edition of that book is less than $20, FWIW.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Can't say I've ever tried changing the settings while the port is open. I can see where that may fail
Been using MSComm for many years on the form it is almost always the to the default 9600,n,8,1 then sets the actual via code often getting the settings from a ini file.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by DataMiser
Can't say I've ever tried changing the settings while the port is open. I can see where that may fail
Been using MSComm for many years on the form it is almost always the to the default 9600,n,8,1 then sets the actual via code often getting the settings from a ini file.
What is this
Me.comRS232 is the name of the MSCOMM32 control on my form (me). I guess "myMain.commRS232.Settings = serialsetup" would be more correct. Serial Setup is a string variable with the settings.
Without the control at the correct settings, I can't open the port. So no, the port is not open.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by DataMiser
Can't say I've ever tried changing the settings while the port is open. I can see where that may fail
Been using MSComm for many years on the form it is almost always the to the default 9600,n,8,1 then sets the actual via code often getting the settings from a ini file.
What is this
I use ini files too. Can you show me a code example of changing the settings? I mean it should be straight forward.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
I thought my work-around my issue worked. I would have two MSCOMM32 controls on the same form. I then define a CTL variable and depending on the instrument, select a given control.
Well, it only works if both controls are configured with the same baud rate. If one control is set to 19200 and the other to 115200, it does transmit data, but apparently at the baud rate of 19200. The instrument hooked to the serial report returns and error message.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
So, now I tried only having one comm32 control on the form. I have it preset for 115200 baud. It works fine, I can connect and everything works perfect, BUT if I do this to configure the control:
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
I may have fixed the issue.
I had always sent to the port this way: MyCTL.Output = Chr(27) & Remote & vbCrLf
What I do not understand is why it works perfect until the mscomm control is addressed?
I changed that line to:
MyCTL.Output = Chr(27) & Remote & Chr(13)
Now I can address the mscomm control all I want and change the baud and it works. I had been using vbCrLf since 2006, as I was taught by the German programming engineers at work. No wonder they had a different version of the exact same program for each instrument.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by DataMiser
Left over line feed in the buffer after sending the VBCRLF ?
Try vbCR instead
Yup, same thing as chr(13).... I would guess unless there are some VB quirks using the pre-defined variables... lol At this point, I would doubt nothing.
I pulled my hair out for far too long over this one. Up until now, I did not have a multi-instrument software tool, or the need for one. The instruments I test are far enough apart in specs or command functions that it was not a bother. This new software tool, only needs to control 2, maybe 3, commands for a given instrument, so it is easy enough to support many different instrument models.
In case you're interested, here is the only report output (via Excel) of this software tool.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by daveyk021
I may have fixed the issue.
I had always sent to the port this way: MyCTL.Output = Chr(27) & Remote & vbCrLf
What I do not understand is why it works perfect until the mscomm control is addressed?
I changed that line to:
MyCTL.Output = Chr(27) & Remote & Chr(13)
Now I can address the mscomm control all I want and change the baud and it works. I had been using vbCrLf since 2006, as I was taught by the German programming engineers at work. No wonder they had a different version of the exact same program for each instrument.
This is not a matter of *choice* or *preference* but all about exact *protocol* your device is implementing.
When using Chr(27) & Remote & vbCrLf you are spamming the device with extra line feeds (vbLf) so it might ignore these or consider these *prefix* to next command which is incorrect as the commands seem to begin with Chr(27).
Anyway, my point is that you've been violating device protocol since 2006 and such latent bugs *always* backfire sooner or later when you change the device model or change connectivity from serial port to USB emulator or similar circumstances.
MSCOMM32 works. The problems are 99.999% of the time in client code.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
"MSCOMM32 works. The problems are 99.999% of the time in client code."
Absolutely true. I just do not understand why it works perfect unless the code is preceded by changing commport settings before opening the port. Then when it didn't work, I could bring up another program using the same code and it connects and works on the first try.
I get the LF, but I am not so sure it is the instrument under test. The examples of using mscomm32 probably only show using a chr(13) to send data over the serial port. The LF might be screwing it up.
BTW, this is under Windows 11. I still had this same issue under Windows 7.
Re: MSCOMM32 Issue, VB6 Not allowing SCOMM32 on form
Originally Posted by daveyk021
"MSCOMM32 works. The problems are 99.999% of the time in client code."
Absolutely true. I just do not understand why it works perfect unless the code is preceded by changing commport settings before opening the port. Then when it didn't work, I could bring up another program using the same code and it connects and works on the first try.
I get the LF, but I am not so sure it is the instrument under test. The examples of using mscomm32 probably only show using a chr(13) to send data over the serial port. The LF might be screwing it up.
BTW, this is under Windows 11. I still had this same issue under Windows 7.
Well what can(will) happen when you send an extra character like that is it can cause everything after the first transmission to not work in your case you say you need chr(27) Data CHR(13) but you were sending CHR(27)datachr(13)chr(10) The client reads up through the chr(13) and may leave the chr(10) in the buffer. Then your next request gets seen as chr(10)chr(27) ..... and that may very well throw a wrench into everything but that is not the doing of MSComm it is a protocol error and depending on the client side code it may or may not be able to deal with such a thing.
Anytime dealing with serial code you should make sure you send exactly what the other end expects to get in the order expected and nothing else. Any extra characters or out of order characters will cause early baldness.