C# 实现多串口数据采集,串口通讯使用问答通讯模式 http://www.doc88.com/p-90893111324.html 借鉴 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PC用网口和串口服务器相连,虚拟出64串口还是看不懂你到底想干什么我先问你几个问题1.PC到底有几个2.串口在PC上还是服务器上3.64串口都在哪里 PC用网口和串口服务器相连,虚拟出64串口还是看不懂你到底想干什么我先问你几个问题1.PC到底有几个2.串口在PC上还是服务器上3.64串口都在哪里1.PC只有一个,通过网线和MOXA的串口服务器连接;2.串口服务器虚拟出64个串口,连接64个独立的串口设备;3.你应该百度下串口服务器。 所谓串口服务器,不就是个以太网转串口的网关么...然后用厂家驱动,你可以在PC上得到虚拟串口,直接操作这个虚拟串口就好了8路和64路有任何区别?反正就是开64个线程呗.串口通信中,线程大部分时间都是在等待数据反馈,应该不涉及速度问题不行两次发送之间加点sleep.反正实时性要求不高 多线程,每个线程传入一个int型的参数,表示索引然后把com口名称等信息放到全局的数组里,每个线程对应去取,就行了 1.我用C#SerialPort已经实现并完成类的封装;2.正在学习线程只是;3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?4.新手,不怕你详细 1.我用C#SerialPort已经实现并完成类的封装;2.正在学习线程只是;3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?4.新手,不怕你详细你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去 1.我用C#SerialPort已经实现并完成类的封装;2.正在学习线程只是;3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?4.新手,不怕你详细你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去现在要求就是要把处理函数封装在类里面,如果不整64个触发处理函数,都绑定一个函数是最省事的,虽然可以用数组保存,但是64个串口传过来的数据,我怎么区分是哪个串口传来的,而且如果同时传过来会不会乱掉,冲散数据? 楼主应该是64个串口数据同时需要接收和处理,网上找到一个处理SerialPort的类应该不难,能实现的也就是一个线程监听一个com了,循环创建多个SerialPort实例,然后处理。 你定义一个二维数组来存数据串口类里传入这个二维数组的名字和索引,触发函数里,把串口数据写入对应位置,不就得了比如定义byte[,] data=new byte[64,256];类里传入data和Index:0-63的索引(当然每个实例对应一个不同的值)回调函数里,for(int i=0;i<buf.length;i++){data[Index,i]=buf[i];} 实际上这样使用,是线程安全的,因为每个串口其实都在操作不同的数组元素,并不是同一个对象而且数组本身是引用类型,可以直接值传递进去并修改,只要不在类里使用new语句,改的其实就是原来的数组 SerialPort 你可以创建多个,然后绑定多个端口,很久没用了,但是记得好像读取数据是事件回调的,然后你都统一处理就是。 thread th1=new thread(fun1);th1.start(index);void fun1(object o){int i=(int)o;}就行了啊.然后串口名称,波特率,奇偶校验那些设置,都定义成全局数组,线程获得了索引,就到数组的对应位置去拿啊 我还是写全点吧void Form_load(){for(int i=0;i<64;i++){Thread th1=new Thread(fun1);th1.Start(i);}}void fun1(object o){int i=(int)o;//i就是前面传进来的那个i,对应0-63,用这个索引到全局数组里取串口名称等参数} 当然我前面写的是直接启动64个线程,并传不同参数的方法.如果你将串口封装到了类里,可以这样定义:public class NPort{public int Index=0;public void NPort(){}public void NPort(int i)//重载构造函数{Index=i;//以下执行开启串口等操作}}//实例化类的代码for(int i=0;i<64;i++){NPort N1=new NPort(i);} 今天接了28个传感器,貌似问题不大,没有出现乱掉的情况,可能是moxa里面有fifo或者协议栈的缘故,偶尔会出现2行数据同时显示的情况,基本算是解决了吧。办法就是写个串口类,用是windows自带的SerialPort类,然后实例化需要的串口 请问如何把serialport控件,封装成类现在的情况是下位机不多,几十个,如果每个都要处理接收什么的,确实麻烦,都重复了。 楼主需要恶补基础了,如何往类里传递参数,如何往线程里传递参数,这些都是相当基础的东西比起64个串口通信的问题,简单多了请问如何将serilport控件如read,write等函数,还有一些其他的变量如finishflg(接收完成标志),timeout(接收超时标志)等,封装到类中,而且是带串口号参数的类?新手,真心求教,最好能给个例子 RDLC多层钻取方法 C#怎样判断托盘是不是被点击? 新人求助,超新人。求补全代码。 C#如何调用文本文件的数值 使用第三方控件之后,如何发布出去? 别人只装.net framework 小小的写字板关闭问题 如何让winform下的datagrid不自动增加新行 为什么匿名类的属性不让修改 非正常退出 DataGrid控件如何设置列标题居中显示 android post提交数据,服务端C# 接受 使用的是.ashx文件,无法获取数据 c#程序怎么修改另一个c#程序中的变量?求助
还是看不懂你到底想干什么
我先问你几个问题
1.PC到底有几个
2.串口在PC上还是服务器上
3.64串口都在哪里
还是看不懂你到底想干什么
我先问你几个问题
1.PC到底有几个
2.串口在PC上还是服务器上
3.64串口都在哪里1.PC只有一个,通过网线和MOXA的串口服务器连接;
2.串口服务器虚拟出64个串口,连接64个独立的串口设备;
3.你应该百度下串口服务器。
然后用厂家驱动,你可以在PC上得到虚拟串口,直接操作这个虚拟串口就好了
8路和64路有任何区别?
反正就是开64个线程呗.
串口通信中,线程大部分时间都是在等待数据反馈,应该不涉及速度问题
不行两次发送之间加点sleep.反正实时性要求不高
然后把com口名称等信息放到全局的数组里,每个线程对应去取,就行了
1.我用C#SerialPort已经实现并完成类的封装;
2.正在学习线程只是;
3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
4.新手,不怕你详细
1.我用C#SerialPort已经实现并完成类的封装;
2.正在学习线程只是;
3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
4.新手,不怕你详细
你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去
1.我用C#SerialPort已经实现并完成类的封装;
2.正在学习线程只是;
3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
4.新手,不怕你详细
你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去现在要求就是要把处理函数封装在类里面,如果不整64个触发处理函数,都绑定一个函数是最省事的,虽然可以用数组保存,但是64个串口传过来的数据,我怎么区分是哪个串口传来的,而且如果同时传过来会不会乱掉,冲散数据?
网上找到一个处理SerialPort的类应该不难,
能实现的也就是一个线程监听一个com了,
循环创建多个SerialPort实例,然后处理。
串口类里传入这个二维数组的名字和索引,触发函数里,把串口数据写入对应位置,不就得了比如定义byte[,] data=new byte[64,256];
类里传入data和Index:0-63的索引(当然每个实例对应一个不同的值)回调函数里,
for(int i=0;i<buf.length;i++)
{
data[Index,i]=buf[i];
}
而且数组本身是引用类型,可以直接值传递进去并修改,只要不在类里使用new语句,改的其实就是原来的数组
但是记得好像读取数据是事件回调的,然后你都统一处理就是。
th1.start(index);void fun1(object o)
{
int i=(int)o;
}
就行了啊.
然后串口名称,波特率,奇偶校验那些设置,都定义成全局数组,线程获得了索引,就到数组的对应位置去拿啊
{
for(int i=0;i<64;i++)
{
Thread th1=new Thread(fun1);
th1.Start(i);
}
}void fun1(object o)
{
int i=(int)o;//i就是前面传进来的那个i,对应0-63,用这个索引到全局数组里取串口名称等参数
}
如果你将串口封装到了类里,可以这样定义:public class NPort
{
public int Index=0;
public void NPort()
{
}
public void NPort(int i)//重载构造函数
{
Index=i;
//以下执行开启串口等操作
}
}//实例化类的代码
for(int i=0;i<64;i++)
{
NPort N1=new NPort(i);
}
请问如何把serialport控件,封装成类现在的情况是下位机不多,几十个,如果每个都要处理接收什么的,确实麻烦,都重复了。
比起64个串口通信的问题,简单多了请问如何将serilport控件如read,write等函数,还有一些其他的变量如finishflg(接收完成标志),timeout(接收超时标志)等,封装到类中,而且是带串口号参数的类?新手,真心求教,最好能给个例子