| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using CCDCount.DLL.AlarmTools;
- using LogClass;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace CCDCount.DLL.CanBus
- {
- public class CanManagerClass
- {
- UInt32 m_devtype = 4;//USBCAN2
- UInt32 m_devind = 0;
- UInt32 m_canind = 0;
- int DataLen = 8;
- VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
- public void OpenDevice()
- {
- if (CanLibraryClass.VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
- {
- Console.WriteLine("打开设备失败,请检查设备类型和设备索引号是否正确");
- return;
- }
- }
- public void InitCan()
- {
- //初始化CAN
- config.AccCode = Convert.ToUInt32("0x00000000", 16);
- config.AccMask = Convert.ToUInt32("0xFFFFFFFF", 16);
- config.Timing0 = Convert.ToByte("0x00", 16);
- config.Timing1 = Convert.ToByte("0x14", 16);
- config.Filter = (Byte)1;
- config.Mode = (Byte)0;
- if (CanLibraryClass.VCI_InitCAN(m_devtype, m_devind, m_canind, ref config) == 0)
- {
- Console.WriteLine("初始化Can失败");
- SystemAlarm.AlarmAlert(AlarmMessageList.CAN连接失败,"CAN Connect Error", "CAN连接失败","CanManagerClass-InitCan");
- return;
- }
- if (CanLibraryClass.VCI_StartCAN(m_devtype, m_devind, m_canind) == 0)
- {
- Console.WriteLine("开启Can失败");
- SystemAlarm.AlarmAlert(AlarmMessageList.CAN连接失败, "CAN Connect Error", "CAN连接失败", "CanManagerClass-InitCan");
- return;
- }
- SystemAlarm.AlarmCancel(AlarmMessageList.CAN连接失败);
- }
- public unsafe bool SenMessage(CanSenMessage senMessage)
- {
- bool result = false;
- VCI_CAN_OBJ sendobj = new VCI_CAN_OBJ();
- sendobj.RemoteFlag = (byte)(0);
- sendobj.ExternFlag = (byte)(0);
- sendobj.ID = Convert.ToUInt32(Convert.ToString(0, 16), 16);
- sendobj.DataLen = Convert.ToByte(DataLen);
- string str = "";
- byte SendMessage0 = new byte();
- SendMessage0 = senMessage.SendDate;
- sendobj.Data[0] = SendMessage0;
- //byte SendMessage1 = new byte();
- //SendMessage1 |= (byte)(1 << 0);
- //sendobj.Data[1] = SendMessage1;
- byte SendMessage6 = new byte();
- SendMessage6 = (byte)(1 << 0);
- sendobj.Data[6] = SendMessage6;
- byte SendMessage7 = new byte();
- if (!senMessage.IsOK)
- SendMessage7 |= (byte)(1 << senMessage.TaiHao);
- sendobj.Data[7] = SendMessage7;
- str += "发送数据:";
- str += string.Format("byte0:{0},byte6:{1},byte7:{2}",
- SendMessage0.ToString("000"),
- SendMessage6.ToString("000"), SendMessage7.ToString("000"));
- if (CanLibraryClass.VCI_Transmit(m_devtype, m_devind, m_canind, ref sendobj, 1) == 0)
- {
- Console.WriteLine("发送失败");
- return result;
- }
- LOG.log(str, 6);
- result = true;
- return result;
- }
- int previousWriteDone = 0;
- public unsafe bool GetTrigger(ref bool isFrist)
- {
- bool result = false;
- UInt32 res = new UInt32();
- VCI_CAN_OBJ[] m_recobj = new VCI_CAN_OBJ[1000];
- res = CanLibraryClass.VCI_Receive(m_devtype, m_devind, m_canind, ref m_recobj[0], 1000, 100);
- if (res == 0xFFFFFFFF) res = 0;
- if (res != 0)
- {
- for (UInt32 i = 0; i < res; i++)
- {
- if (m_recobj[i].RemoteFlag == 0)
- {
- int writeDone = -1;
- fixed (VCI_CAN_OBJ* m_recobj1 = &m_recobj[i])
- {
- writeDone = m_recobj1->Data[6] & 0x01;
- if(isFrist)
- {
- previousWriteDone = writeDone == 0 ? 1 : 0;
- isFrist = false;
- LOG.log(string.Format(
- "通讯状态初始化,prevateWriteDone:{0},WriteDone:{1},IsFrist:{2}",
- previousWriteDone, writeDone, isFrist), 6);
- }
- }
- if ((writeDone == 1 && previousWriteDone == 0) || (writeDone == 0 && previousWriteDone == 1))
- {
- result = true;
- }
- previousWriteDone = writeDone;
- }
- }
- }
- return result;
- }
- public void CloseCan()
- {
- if(CanLibraryClass.VCI_ResetCAN(m_devtype, m_devind, m_canind)==0)
- {
- LOG.error("CAN关闭失败");
- }
- }
- }
- }
|