解决方案 »

  1.   

    PC用网口和串口服务器相连,虚拟出64串口
    还是看不懂你到底想干什么
    我先问你几个问题
    1.PC到底有几个
    2.串口在PC上还是服务器上
    3.64串口都在哪里
      

  2.   

    PC用网口和串口服务器相连,虚拟出64串口
    还是看不懂你到底想干什么
    我先问你几个问题
    1.PC到底有几个
    2.串口在PC上还是服务器上
    3.64串口都在哪里1.PC只有一个,通过网线和MOXA的串口服务器连接;
    2.串口服务器虚拟出64个串口,连接64个独立的串口设备;
    3.你应该百度下串口服务器。
      

  3.   

    所谓串口服务器,不就是个以太网转串口的网关么...
    然后用厂家驱动,你可以在PC上得到虚拟串口,直接操作这个虚拟串口就好了
    8路和64路有任何区别?
    反正就是开64个线程呗.
    串口通信中,线程大部分时间都是在等待数据反馈,应该不涉及速度问题
    不行两次发送之间加点sleep.反正实时性要求不高
      

  4.   

    多线程,每个线程传入一个int型的参数,表示索引
    然后把com口名称等信息放到全局的数组里,每个线程对应去取,就行了
      

  5.   


    1.我用C#SerialPort已经实现并完成类的封装;
    2.正在学习线程只是;
    3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
    4.新手,不怕你详细
      

  6.   


    1.我用C#SerialPort已经实现并完成类的封装;
    2.正在学习线程只是;
    3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
    4.新手,不怕你详细

    你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去
      

  7.   


    1.我用C#SerialPort已经实现并完成类的封装;
    2.正在学习线程只是;
    3.现在纠结与实例化64个类,64个触发函数难道一个一个写出来么?
    4.新手,不怕你详细

    你不会把触发函数也封装到类里去,至于触发之后,数据保存到哪个数组,可以通过参数传递进去现在要求就是要把处理函数封装在类里面,如果不整64个触发处理函数,都绑定一个函数是最省事的,虽然可以用数组保存,但是64个串口传过来的数据,我怎么区分是哪个串口传来的,而且如果同时传过来会不会乱掉,冲散数据?
      

  8.   

    楼主应该是64个串口数据同时需要接收和处理,
    网上找到一个处理SerialPort的类应该不难,
    能实现的也就是一个线程监听一个com了,
    循环创建多个SerialPort实例,然后处理。
      

  9.   

    你定义一个二维数组来存数据
    串口类里传入这个二维数组的名字和索引,触发函数里,把串口数据写入对应位置,不就得了比如定义byte[,] data=new byte[64,256];
    类里传入data和Index:0-63的索引(当然每个实例对应一个不同的值)回调函数里,
    for(int i=0;i<buf.length;i++)
    {
    data[Index,i]=buf[i];
    }
      

  10.   

    实际上这样使用,是线程安全的,因为每个串口其实都在操作不同的数组元素,并不是同一个对象
    而且数组本身是引用类型,可以直接值传递进去并修改,只要不在类里使用new语句,改的其实就是原来的数组
      

  11.   

    SerialPort 你可以创建多个,然后绑定多个端口,很久没用了,
    但是记得好像读取数据是事件回调的,然后你都统一处理就是。
      

  12.   

    thread th1=new thread(fun1);
    th1.start(index);void fun1(object o)
    {
    int i=(int)o;
    }
    就行了啊.
    然后串口名称,波特率,奇偶校验那些设置,都定义成全局数组,线程获得了索引,就到数组的对应位置去拿啊
      

  13.   

    我还是写全点吧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,用这个索引到全局数组里取串口名称等参数
    }
      

  14.   

    当然我前面写的是直接启动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);
    }
      

  15.   

    今天接了28个传感器,貌似问题不大,没有出现乱掉的情况,可能是moxa里面有fifo或者协议栈的缘故,偶尔会出现2行数据同时显示的情况,基本算是解决了吧。办法就是写个串口类,用是windows自带的SerialPort类,然后实例化需要的串口
      

  16.   


    请问如何把serialport控件,封装成类现在的情况是下位机不多,几十个,如果每个都要处理接收什么的,确实麻烦,都重复了。
      

  17.   

    楼主需要恶补基础了,如何往类里传递参数,如何往线程里传递参数,这些都是相当基础的东西
    比起64个串口通信的问题,简单多了请问如何将serilport控件如read,write等函数,还有一些其他的变量如finishflg(接收完成标志),timeout(接收超时标志)等,封装到类中,而且是带串口号参数的类?新手,真心求教,最好能给个例子