|
Thanks for your reply.
Because a class of the exmple has the same name in the SDK,
I misunderstood the meaning.
Thanks anyway!
|
|
|
|
|
I'm looking for some advice on an approach to implement PC to PC communications.
Here's the scenario:
PC #1 - Running a VB6 application that receives data from several vision inspection systems. This data is received at a rate of roughly 1KB per 50mS.
PC #2 - Running a C# application that is essentially a terminal with a nice GUI and manages production statistics.
An additional "nice to have" would be to have the GUI application on PC #2 start the VB6 application on PC #1 with some event args that denotes the configuration file for the inspection systems.
I'm struggling to think of the proper approach to load the VB6 application from PC#2 and move the data from the VB6 application to PC #2 (C# application) preferably real-time.
My initial thoughts were to build a small Socket server application that resides on PC #1. Build a winsock application for the existing VB6 application, and Socket application for the C# application on PC #2.
I would expect the example above to follow the routine below:
1) C# application PC #2 initiates a connection to server application on PC #1.
2) C# application on PC #2 gives server application the configuration file in which to load.
3) Server application starts the local VB6 application. 4) The VB6 application begins sending data to the local server application (PC #1).
5) The server application receives the data and forwards it over to the C# application on PC #2
6) Once production is complete, C# application tells the server application to shut down the VB6 application.
Are there any better / simpler approaches? Sockets? TCPListeners? Pipes? etc.
Thank you in advance..
|
|
|
|
|
Your options here are:
- DCOM
- TCP or server on machine 1 and client in the UI on machine 2
- UDP transceivers in both machines
- Some kind of high level service on machine 1 (e.g. REST, WCF) and client code on machine 2
DCOM is disgusting and horrible and I really wouldn't go that way.
All the other options require a daemon (in Windows land, a service) that is always on, so you can request that it starts the other application.
Depending on how strict you want 'real time' to be, I'd pick either a TCP client/server or UDP open channel model. What you want to communicate is simple enough that imo high level service frameworks are overkill, and they add bandwidth and latency.
UDP is faster but less reliable (i.e. packets can arrive out of order or be dropped). If you want to get the latest data and don't care about prior updates then use UDP and send an update in a single packet (1KB will easily fit in a packet). If you want the full ordered stream to create timeseries data then use TCP and some kind of message protocol (see my article for one way you can do that).
|
|
|
|
|
|
No it is not urgent and you need to at least attempt to do your homework yourself.
|
|
|
|
|
Member 10702142 wrote: please help me out
Steps
1. Learn basics of programming in C#
2. Create a design
3. Implement the design using 1 and 2
4. Test and debug 3
|
|
|
|
|
Help you with what? Write your code for you?? NEVER GOING TO HAPPEN!
|
|
|
|
|
Member 10702142 wrote: please help me out
Sure. Which way did you come in?
|
|
|
|
|
Just pick the nearest drain!
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Attendance management system? Seems like you should have been using one of those so that you actually went to your classes and would know what you were supposed to do now ...
|
|
|
|
|
Is it still urgent?
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
Would you like fries with that?
|
|
|
|
|
Oh! Yes please - and some onion rings?
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
I am to write (oh boy, another) "simple, easy" interface on a PC to talk to an external box.
Can someone point me to an elementary source of short refresher lessons on C# ?
These thousand page books are great, but way way overkill.
I just need to refresh my mind on how to get text into variables, and so on.
I'm thinking that a five or ten lesson course would be fine to get up and done with this.
In this case I will have some text boxes, a serial port talking to the box, a few buttons for the user to click (possibly only one button; start/stop) and the code will make some decisions based on the user and the box.
It will generally look like this...
- User defines various arrangements of bytes
- PC sends those out
- External box responds
- If box replied with X, then do Procedure X
- If box replied with Y, then do Procedure Y
- If box replied with Z, then do Procedure Z
I have not written any C# in 18 months.
Is there a little 5 or 10 Lesson refresher course freely available that someone here could recommend ? This place (i.e., CodeProject) was quite helpful a couple of years ago. I will be looking around here for other ideas. Pointers to good stuff are welcome
|
|
|
|
|
.NET Book Zero by Charles Petzold immediately comes to mind, and it's free, and on-line: [^].
Please check these posts out for other book recommendations: [^], [^], [^].
“Use the word 'cybernetics,' Norbert, because nobody knows what it means. This will always put you at an advantage in arguments.” Claude Shannon (Information Theory scientist): letter to Norbert Weiner of M.I.T., circa 1940
|
|
|
|
|
I just need to refresh on the elementary stuff; for the moment, how to get a string of text out of a textbox and into my own variable for syntax checking, how to throw up a good/bad response, and that sort of thing.
Are such mundane questions okay here ?
|
|
|
|
|
Considering the mundanity of questions we see all the time, I'm sure it would be fine (either here or in Q&A).
It might be worth searching for tutorials, if you really do mean the elementary stuff.
|
|
|
|
|
C-P-User-3 wrote: how to get a string of text out of a textbox
string myString = myTextBox.Text;
C-P-User-3 wrote: how to throw up a good/bad response Do you mean how to display a MessageBox [^]?
/ravi
|
|
|
|
|
Thanks Ravi, perfect.
What I have is a box where the user Enters hex bytes, and I have a button next to it that says "Check Syntax"
When he clicks, I need to examine the text in the box (thanks for this refresher)...
string myString = myTextBox.Text;
Then I need to pop up an "OK" box with an exit only or a "Bad" box with an okay on it.
We might want to show him the details of which byte was wrong.
In this case, "OK" text will be
-- 0-thru-9
-- A-thru-F
-- An asterisk (Ascii 02Ah)
-- A question mark (Ascii 03Fh)
Oh, just remembered; we want a comma between each element.
I will have to work out the details of White space (none, one, and multiple instances between the digits) and the single digit problem for values 00h thru 0Fh
|
|
|
|
|
It should be very easy to do what you want to do. But your requirements (as stated in your post) are very vague. Are we talking single hex digits, a string of hex digits, etc. Are the * and ? delimiters or terminators? Are they optional? To many questions. You need to be extremely and unabiguously specific if you're going to code any of this.
Also, this begs the question: why validate when you can sanitize (i.e. fix up) the user's input and therefore be more forgiving to the end user and guarantee that the device receives valid data?
/ravi
modified 30-Mar-14 0:19am.
|
|
|
|
|
Okay, new thread time, will do.
|
|
|
|
|
Hello I'm new at c# and I'm running into a cross thread issue.
I'm reading ASCII data from the serial port using the following code below:
I will like to know how to pass RxString to a different Method without getting a cross thread error?
Thanks
public void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
RxString = serialPort1.ReadLine();
label1.Text = RxString;
}
catch (Exception)
{
MessageBox.Show("Data Receive Error: Close Port & Change Baud Rate" );
System.Threading.Thread.Sleep(5000);
bool dataerror = true;
DataRecError(dataerror);
return;
}
this.Invoke(new EventHandler(DisplayText));
i++;
}
|
|
|
|
|
|
Thanks for the link, but I still cannot get it working.
|
|
|
|
|
The problem is the line
label1.Text = RxString; It must not be executed in a thread different than the main thread.
Try following code:
if (InvokeRequired)
{
this.Invoke(new System.Action(() => { label1.Text = RxString; }));
}
else
{
label1.Text = RxString;
}
|
|
|
|