LB Booster
Programming >> Compatibility with LB4 >> opening more than 4 COM ports at the same time http://lbb.conforums.com/index.cgi?board=compatibility&action=display&num=1483604103 opening more than 4 COM ports at the same time
Post by janga on Jan 5th, 2017, 07:15am
hello, It is my first post in this forum , so please excuse my mistakes. Is there a limit in the number of COM ports opened in the same time? I need to work with 5 COM ports reading data from external devices. I can open only 4 com ports , when I try to open the 5th I got the message "Too many open files at line 0". the code may look like this:
open "Com1:9600,n,8,1" for random as #com1 open "Com2:9600,n,8,1" for random as #com2 open "Com6:9600,n,8,1" for random as #com6 open "Com9:9600,n,8,1" for random as #com9 open "Com20:9600,n,8,1" for random as #com20 close #com1 close #com2 close #com6 close #com9 close #com20
the ports are present on the PC, each of them work separately , but 5 of them together are not willing to cooperate ...
Is there an easy solution to this problem or is it a set limit ? Best regards
Janusz
Re: opening more than 4 COM ports at the same time
Post by Richard Russell on Jan 5th, 2017, 08:25am
Is there an easy solution to this problem or is it a set limit ?
It is a set limit in LBB (which it inherits from BBC BASIC) so there's not an easy solution, sorry. To open more than four serial ports simultaneously would require either using Windows API calls or some 'cheat' embedded BBC BASIC code.
I could try to write some code for you, if you are sufficiently keen to want me to do that. No promises though.
Richard.
Re: opening more than 4 COM ports at the same time
Post by janga on Jan 5th, 2017, 09:26am
Richard, Thank you so much for a fast answer. It would be nice not to have the limitation , but if it needs a lot of work I could try to find some other solution. Maybe running two separate programs and sending the data between them?
Thank you for your help,
Janusz
Re: opening more than 4 COM ports at the same time
Post by RobM on Jan 8th, 2017, 05:24am
I know nothing about working with com ports but if you are doing something like reading a temperature, could you open, read, and then close them one at a time?
Re: opening more than 4 COM ports at the same time
Post by janga on Jan 9th, 2017, 12:14pm
Thank you for the suggestion. It is of course possible to close and open the ports one by one , but some of the devices transmit the data asynchronously and there is a risk of loosing the data. Not all of them can respond to messages. It was a question rather to clarify if I was doing some mistake or if the problem was in some limits that I was not aware of. The answer was very fast so Thanks again. Re: opening more than 4 COM ports at the same time
Post by Richard Russell on Jan 10th, 2017, 12:46pm
It was a question rather to clarify if I was doing some mistake or if the problem was in some limits that I was not aware of.
I am confident that it should be possible to overcome the limit quite easily. Basically the trick will be to re-use the same 'handle' for more than one serial port, so for example if each handle is shared between two ports, it would raise the limit to 8 simultaneously-open ports.
One approach, which seems to work, is to provide a 'swap port' function that switches the given handle to an alternative port. A slight complication is that it's not straightforward to pass a handle as a parameter in Liberty BASIC (handles are always global) so I've been experimenting with either passing the handle as a string, or passing the native Windows handle (which you can get with the HWND function in LBB).
Unfortunately I am busy with other projects at the moment so I haven't been able to give this as much attention as it deserves.