|
You're welcome
|
|
|
|
|
Hello,
I am trying to communicate with a Cognex data matrix scanner which is connected to the PC via USB, emulating a COM port. I can open the connection and send commands to the scanner (which is reacting on the commands), but I do not receive any data from the port.
For getting started, I used an example from the MSDN
(http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.aspx[^]) which I simplified and adjusted for the device:
_serialPort = new SerialPort();
_serialPort.PortName = "COM4";
_serialPort.BaudRate = 115200;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.None;
_serialPort.NewLine = "\r\n";
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
I also tried to use the DataReceived and the other events - but also no response. I wrote a small C++ app to use the Win32 api directly but no response either. I downloaded several example applications - but still no response.
The scanner, however, works with the manufacturer application - I therefore downloaded the trial of "Advanced Serial Port Monitor" to see the communication. Interestingly, with this program I am able to communicate with the device and to receive data as expected - but I don't know what is different...
Alex
|
|
|
|
|
Had exactly that problem send, but no receive of data with a spectrum analyzer. I found it was due to an incorrectly set HandShake property I had it as none it should have been 1. Much confusion all that had happen was a change from wired 9 way to USB. My advice is to play around with the HandShake, StopBits, Parity & NewLine just to see if that makes any difference. Try copying across the Advance Serial Port Monitor settings to see if that makes a difference.
Glenn
|
|
|
|
|
Thank you for your answer.
The settings are exactly the same as in Advance Serial Port Monitor as well as the manufacturer application. Indeed, it makes no difference if I change any of these settings except for the NewLine string (when I change this setting, the commands are not accepted any more).
Perhaps the settings do not play any role because the COM port is only "virtual"? The device is connected to an USB slot, where the communication is handled by windows. However, still no response with SerialPort ...
Alex
|
|
|
|
|
There shouldn't be any problem with the device being virtual and interfacing to Visual Studio, my current project is using a Virtual Comm Port, and the FSH3 I referred to was virtual on the USB ( & used Handshaking.None the 9way Dtype used HandShaking.Even). Can I suggest using Jan Axelson's code at www.lvr.com as this I have found does it properly (not that your code is not proper it's just without seeing it...) . It is odd Advanced Serial Port Monitor can send and receive data if it was only the manufactures program I would start to wonder if they had done a trick to prevent others from writing software to interface to it!
Glenn
|
|
|
|
|
I finally found the cause:
I have to set
_serialPort.DtrEnable = true;
and it works - I receive the expected data.
However, I am still wondering why this is not done in typical other examples?
Alex
|
|
|
|
|
That's good, now have you done the Happy Dance! as in the "It works, Hurah!!"
DTR or Data Terminal Ready some times needs to be set high on RS232 to allow the port that there is data there. Not really used that much these days I have used the DTR & CTS lines to supply power to some (smallish) circuits you can also use them as signal lines as you can control the on / off states via the true / false property (I have used the to control LED's & Relays). Good on you for finding that can I suggest the book Serial Port Complete by Jan Axelson (ISBN 978-1-931448-06-2) as a good reference (her other books are good too!, if you want to start hanging stuff out of your PC!)
-=-=-=-=-=-=
Also just though if the piece of hardware is a 'modern' version of an older bit of hardware it could be that the software was designed to alter DTR & CTS to send and receive data on the go and when the USB version of the hardware came about it was easier to bodge some thing like setting a pin high on the port than rewrite the software.
Glenn
modified 24-Aug-12 5:58am.
|
|
|
|
|
what is the code of cheeckbox in c# windows application and what is the use of chekbox in c#.
|
|
|
|
|
You can find all the code you need in the examples found at MSDN - it's one of the simpler controls to use. A checkbox is used to allow a user to select more than one option from a list of several. This contrasts with a radio button, which allows only a single selection from a group of options. A radiobutton is exclusive, while a checkbox is inclusive of a set of available options.
Will Rogers never met me.
|
|
|
|
|
A checkbox allows a user to toggle between two options (1 or 0, yes or no).
To implement it, you need to start by reading a book on C#. Or you could read through a number of articles on msdn[^].
|
|
|
|
|
Not quite - had you forgotten the ThreeState[^] property?
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Oops.
|
|
|
|
|
You might want to change your username. If you use your e-mail address, you'll get spammed.
|
|
|
|
|
In C#, how do you output the contents of a Dictionary class?
Once you have loaded a Dictionary class with keys and values, how do I cycle through them and output the individual values in a foreach loop?
|
|
|
|
|
foreach (KeyValuePair<type1, type2> pair in dict)
{
Console.WriteLine("{0}, {1}",
pair.Key,
pair.Value);
}
Why is common sense not common?
Never argue with an idiot. They will drag you down to their level where they are an expert.
Sometimes it takes a lot of work to be lazy
Please stand in front of my pistol, smile and wait for the flash - JSOP 2012
|
|
|
|
|
Try this
Dictionary<object, object> dummyDictionary = new Dictionary<object, object>
{
{"India","Delhi"},
{"USA","WashingtonDC"},
{"Bangaladesh","Dhaka"},
{"Pakistan","Karachi"}
};
foreach (KeyValuePair<object, object> kvp in dummyDictionary)
{
Console.WriteLine(string.Format("Key = {0} Value = {1}", kvp.Key, kvp.Value));
}
var result =
(from kvp in dummyDictionary
select new
{
Key = kvp.Key
,
Value = kvp.Value
});
result.ToList().ForEach(kvp => Console.WriteLine(string.Format("Key = {0} Value = {1}", kvp.Key, kvp.Value)));
Console.ReadKey();
Niladri Biswas
(Code Project MVP 2012)
|
|
|
|
|
There is another way as well, which can be more readable.
Assuming Track is one of your classes:
Dictionary<string, Track> dict = new Dictionary<string, Track>();
foreach (Track track in DALFactory.GetAll<Track>())
{
dict.Add(track.TrackName, track);
}
...
foreach (string key in dict.Keys)
{
if (key.StartsWith("A"))
{
Track track = dict[key];
Console.WriteLine(track);
}
}
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
A number of approaches are described here[^].
|
|
|
|
|
Hi all C# gurus I need advice on Deadlock
I have a code structure for Window Service, multithreading, task factory like
public partial class rs : ServiceBase
{
private Queue jobQueue = Queue.Synchronized(new Queue());
private Queue DatafeedQueue = Queue.Synchronized(new Queue());
private Dictionary<...> ScheduleJobs = new Dictionary<...>();
private AutoResetEvent _BlockThreadTaskScheduler = new AutoResetEvent(true);
private AutoResetEvent _BlockThreadDatafeedSourceTaskScheduler = new AutoResetEvent(false);
private LimitedConcurrencyLevelTaskScheduler _TaskScheduler;
private LimitedConcurrencyLevelTaskScheduler _DatafeedSourceTaskScheduler;
public rs()
{
InitializeComponent();
_timer = new System.Timers.Timer(POLL_INTERVAL_MINUTE * 60 * 1000);
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
_TaskScheduler = new LimitedConcurrencyLevelTaskScheduler(2);
_DatafeedSourceTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(1);
protected void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
DatafeedQueue.Clear();
try
{
(Execute a stored procedure here)
while(xxx.Read())
{
DatafeedObj dfo = new DatafeedObj();
...
DatafeedQueue.Enqueue(dfo);
}
}
catch()...
TaskFactory DatafeedSourceFactory = new TaskFactory(_DatafeedSourceTaskScheduler);
for (int i = 0; i < DatafeedQueue.Count; i++)
{
DatafeedSourceFactory.StartNew(() => processDatafeedQueue());
}
_BlockThreadDatafeedSourceTaskScheduler.Set();
}
catch()...
}
private void processDatafeedQueue()
{
_BlockThreadDatafeedSourceTaskScheduler.WaitOne();
try
{
lock (DatafeedQueue.SyncRoot)
{
if (DatafeedQueue.Count > 0)
{
DatafeedObj dfo = ((DatafeedObj)(DatafeedQueue.Dequeue()));
#region DataFeed Type A
ScheduleJobs = (Calls a static class, static method);
jobQueue = (Calls a static class, static method turn ScheduleJobs dictionary into Queue);
var factory = new TaskFactory(_TaskScheduler);
for (int i = 0; i < jobQueue.Count; i++)
{
factory.StartNew(() => startTypeA());
}
#endregion
#region DataFeed Type B
ScheduleJobs = (Calls a static class, static method);
jobQueue = (Calls a static class, static method turn ScheduleJobs dictionary into Queue);
var factory = new TaskFactory(_TaskScheduler);
for (int i = 0; i < jobQueue.Count; i++)
{
factory.StartNew(() => startTypeB());
}
#endregion
#region DataFeed Type C
ScheduleJobs = (Calls a static class, static method);
jobQueue = (Calls a static class, static method turn ScheduleJobs dictionary into Queue);
var factory = new TaskFactory(_TaskScheduler);
for (int i = 0; i < jobQueue.Count; i++)
{
factory.StartNew(() => startTypeC());
}
#endregion
}
}
}
if (_TaskScheduler.NumberOfRemainingScheduledTasks == 0)
{
_BlockThreadDatafeedSourceTaskScheduler.Set();
}
}
void startTypeA()
{
(In this method, it creates a object from another project class which calls a WCF Service and select data and insert into local db and run stored procedures)
}
void startTypeB()
{
(Same as startTypeA but calls a different WCF and insert into the same set of tables which startTypeA also insert into then also run a same set of stored procedures)
}
void startTypeC()
{
(Same as startTypeC but calls a different WCF and into different set of tables than startTypeA and startTypeB then run different set of stored procedures)
}
...
I was able to grab all the data from all 3 set of WCF services but the problem is after Type A and Type B insert the data and both calls the same set of stored procedures a few Job Queue had Error 1205, deadlock. Then after service has stopped, I had to manually rerun the stored procedures to process those leftover.
Can anyone know how to fix the deadlock, also I use AutoResetEvent to keep a thread blocked while another thread is processing. It doesn't seem like its doing its job.
I was thinking for alternative way but I would like to keep the same logic, task factory...
My alternative way, non-tested with actual code, but I wrote a draft similar to what I needed, but I am unsure if deadlock will still exists
class Program
{
static SemaphoreSlim _sem = new SemaphoreSlim(3);
static void Main()
{
for (int i = 1; i <= 3; i++)
{
new Thread(RunThisMethod).Start(i);
}
Console.ReadLine();
}
static void RunThisMethod(Object id)
{
Console.WriteLine(id + " wants to enter");
_sem.Wait();
if (id.ToString() == "1")
{
Console.WriteLine("Start Type A");
Thread.Sleep(3000);
Console.WriteLine("End Type A");
}
else if (id.ToString() == "2")
{
Console.WriteLine("Start Type B");
Thread.Sleep(6000);
Console.WriteLine("End Type B");
}
else if (id.ToString() == "3")
{
Console.WriteLine("Start Type C");
Thread.Sleep(9000);
Console.WriteLine("End Type C");
}
_sem.Release();
}
}
|
|
|
|
|
necesito un ejemplo que convierta documentos a formatos de imagen utilizando c# o una manera facil de usar imagemagick
|
|
|
|
|
Did you mean "convierte"? This is an English-speaking site, and you'd greatly enhance the resultset of useable answers by phrasing your query using that language;
I need an example to convert documents to image formats using c # or an easy way to use imagemagick
Did you try Google? The Imagemagick manual?
Which (file)type of documents, and which imageformat specifically? Word to Bitmap? PDF to JPG?
Bastard Programmer from Hell
if you can't read my code, try converting it here[^]
|
|
|
|
|
Eddy Vluggen wrote: Which (file)type of documents, and which imageformat specifically? Word to Bitmap? PDF to JPG?
With the quality of questions we are getting at the moment, I suspect it will be "EXE" to "AVI"...
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
OriginalGriff wrote: "EXE" to "AVI" Sir, do you have codz for that, urgent?
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
I do!
File.Move(...
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
i have a txt Structured file as Ascii. i can read information of that file as structure.
that structure is same as follow:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
private struct Header
{
public byte version;
public Int32 numRecords;
public Int16 headerLen;
public Int16 recordLen;
public byte encryptionFlag;
public Int64 reserved;
....
}
when writing in file , i need to change one /two field of file e.g numRecords.
how can i write this instance file writing? i tried following code but file destroyed and i couldn't read file
using (OpenFileDialog of=new OpenFileDialog())
{
of.ShowDialog();
FileStream fs = new FileStream(of.FileName,FileMode.Open,FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
BinaryReader br = new BinaryReader(fs);
byte[] buffer = new byte[Marshal.SizeOf(typeof(Header))];
buffer = br.ReadBytes(Marshal.SizeOf(typeof(Header)));
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
Header rHeader = ((Header)(Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(Header))));
handle.Free();
Header wHeader = rHeader;
wHeader.numRecords = 5;
IntPtr ptr = Marshal.AllocHGlobal(buffer.Length);
Marshal.StructureToPtr(wHeader, ptr, true);
Marshal.Copy(ptr, buffer, 0, buffer.Length);
Marshal.FreeHGlobal(ptr);
bw.Seek(0, SeekOrigin.Begin);
bw.Write(buffer);
bw.Close();
br.Close();
fs.Close();
}
|
|
|
|