C#周立功CANET-200T(新)

来源:互联网 发布:js 获取div的name 编辑:程序博客网 时间:2024/06/09 20:26

之前写过一个关于CANET的文章,现在有所改进 

CANET-200T有两个CAN的端口,用程序分别给这两个口发送和接受数据;启动这两个端口,要把两个端口当作两个设备来启动。



#启动CANET-200T的第一个端口 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.Runtime.InteropServices;
using System.Configuration;


namespace BroadcastCtrl
{
    public class CANstart
    {
        [DllImport("ControlCAN")]


        private static extern Int32 VCI_OpenDevice(Int32 DevType, Int32 DevIndex, Int32 Reserved);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_StartCAN(Int32 DevType, Int32 DevIndex, Int32 CANIndex);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_SetReference(Int32 DevType, Int32 DevIndex, Int32 CANIndex, Int32 RefType, [MarshalAs(UnmanagedType.LPStr)]string pData);//[MarshalAs(UnmanagedType.LPStr)]string IntPtr


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_SetReference(Int32 DevType, Int32 DevIndex, Int32 CANIndex, Int32 RefType, out Int32 pData);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_Receive(Int32 DevType, Int32 DevIndex, Int32 CANIndex, ref VCI_CAN_OBJ pReceive, Int32 Len, int WaitTime);


        public RestartCAN rc;
        public int isRes = 0;


        public CANstart()
        {
            int i = VCI_OpenDevice(17, 0, 0);//第二个参数为设备索引号 第一个设备设置为0
            if (i == 1)
            {
                string CANip = ConfigurationManager.AppSettings["canip"].ToString();
                Int32 ll = 4001;//第一个端口号
                i = VCI_SetReference(17, 0, 0, 0, CANip);
                i = VCI_SetReference(17, 0, 0, 1, out ll);


                i = VCI_StartCAN(17, 0, 0);
                if (i == 1)//开启
                {
                    //MessageBox.Show("start ok");
                }
                else
                {
                    //MessageBox.Show("start error");
                    isRes = 1;
                    rc = new RestartCAN();
                }
            }
            else
            {
                //MessageBox.Show("ERROR");
            }
        }
    }
}


#启动第二个端口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.Runtime.InteropServices;
using System.Configuration;


namespace BroadcastCtrl
{
    public class CANstart2
    {
        [DllImport("ControlCAN")]


        private static extern Int32 VCI_OpenDevice(Int32 DevType, Int32 DevIndex, Int32 Reserved);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_StartCAN(Int32 DevType, Int32 DevIndex, Int32 CANIndex);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_SetReference(Int32 DevType, Int32 DevIndex, Int32 CANIndex, Int32 RefType, [MarshalAs(UnmanagedType.LPStr)]string pData);//[MarshalAs(UnmanagedType.LPStr)]string IntPtr


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_SetReference(Int32 DevType, Int32 DevIndex, Int32 CANIndex, Int32 RefType, out Int32 pData);


        [DllImport("ControlCAN")]
        private static extern Int32 VCI_Receive(Int32 DevType, Int32 DevIndex, Int32 CANIndex, ref VCI_CAN_OBJ pReceive, Int32 Len, int WaitTime);


        public RestartCAN2 rc2;
        public int isRes = 0;


        public CANstart2()
        {
            int i = VCI_OpenDevice(17, 1, 0);;//第二个参数为设备索引号 第二个设备设置为1
            if (i == 1)
            {
                string CANip = ConfigurationManager.AppSettings["canip_2"].ToString();
                Int32 ll = 4002;//第二个端口号
                i = VCI_SetReference(17, 1, 0, 0, CANip);
                i = VCI_SetReference(17, 1, 0, 1, out ll);


                i = VCI_StartCAN(17, 1, 0);
                if (i == 1)//开启
                {
                    //MessageBox.Show("start ok");
                }
                else
                {
                    //MessageBox.Show("start error");
                    isRes = 1;
                    rc2 = new RestartCAN2();
                }
            }
            else
            {
                //MessageBox.Show("ERROR");
            }
        }
    }
}

#上述可以将CANET-200T的俩个端口都打开

接受和发送数据就和之前写的一样。用设备索引号来区分是哪个端口。



原创粉丝点击