串口通讯

mmzz_wang 2003-08-19 09:29:53
要实现对多台计算机串口的本地和远程控制,该怎么做?
...全文
70 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
colin666 2003-08-19
  • 打赏
  • 举报
回复
如果不不想造成多台计算机同时对串口进行操作,这个完全可以在你的程序里面控制的.对串口的控制权做成唯一的.计算机要控制串口时,去检查这个控制权,如果空闲则可以使用,不空闲则等待.
mmzz_wang 2003-08-19
  • 打赏
  • 举报
回复
用Remoting时如何防止多台计算机同时对串口进行操作呢?(因为通讯采用的是半双工485通讯)
雪狼1234567 2003-08-19
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

Serial COM Simply in C#
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320
微软提供的为.net提供的串口解决方法,说控件也好http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx
再给你一点源代码参考:
public static bool InitComm(string com)
{
Win32Com.DCB PortDCB = new Win32Com.DCB();
Win32Com.COMMTIMEOUTS CommTimeouts = new Win32Com.COMMTIMEOUTS();
Win32Com.OVERLAPPED wo = new Win32Com.OVERLAPPED();
IntPtr hPort;


hPort = Win32Com.CreateFile(com, Win32Com.GENERIC_READ | Win32Com.GENERIC_WRITE, 0, IntPtr.Zero,
Win32Com.OPEN_EXISTING, Win32Com.FILE_FLAG_OVERLAPPED, IntPtr.Zero);
if (hPort == (IntPtr)Win32Com.INVALID_HANDLE_VALUE)
{
return false;
}



//JH1.1: Changed from 0 to "magic number" to give instant return on ReadFile:
CommTimeouts.ReadIntervalTimeout = Win32Com.MAXDWORD;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;


CommTimeouts.WriteTotalTimeoutMultiplier=1000;
CommTimeouts.WriteTotalTimeoutConstant = 0;
Win32Com.GetCommState (hPort,ref PortDCB);

PortDCB.BaudRate = 9600;
PortDCB.ByteSize = 8;
PortDCB.Parity = (byte)0;
PortDCB.StopBits = (byte)0;



if (!Win32Com.SetCommState(hPort, ref PortDCB))
{
return false;
}
if (!Win32Com.SetCommTimeouts(hPort, ref CommTimeouts))
{
return false;
}
Win32Com.CancelIo (hPort);
Win32Com.CloseHandle (hPort);
return true;
}






System.IntPtr pHandle;
int handle;
//opens the existing file...
handle = CreateFile(fileName,
GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);

pHandle=new System .IntPtr (handle);
FileStream fs=new FileStream (pHandle,FileAccess.Write );
string s;




byte[] byteOut;
Int32 dwCount = s.Length;
byteOut = new byte[dwCount];
// for (int i = 0;i<dwCount;i++)
// {
// // ByteStrings.to
// byteOut[i] = System.Convert.ToByte( s[i]);
//
// }
byteOut=Encoding.ASCII .GetBytes (s);

// How many characters are in the string?


fs.Write (byteOut,0,dwCount);
fs.Flush ();
fs.Close ();
Win32Com.CloseHandle (pHandle);
return true;
}



110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧