工业控制研华板卡的VC编程实现

日期:2016-08-07 16:38:10编辑作者:申博亚洲
在论坛中经常有人提出关于研华工业用控制板卡的vc编程方法。此类板卡编程方法比较复杂,根据说明书上面说明我们可以采用两种编程方法,一种是自己编写控制各种寄存器代码进行数据的采集和输出,另外一种就是利用他封装的DLL的方法访问相应的函数进行完成。

  为了节省时间提高开发效率,当然使用第二种方法了.我们可以根据研华光盘里面提供的例子进行修改就可以完成了. 

  1:A/D板编程实例(型号:PCL1754,通道:64)

//定义一个结构体变量保存64通道的DI信息
struct tagSYSTEMSTATE
{
 int nState;//DI状态
 BOOL bState;//是否为数字量接点
};
//初始化里面启动线程进行板卡的采集工作
void CMy11View::OnInitialUpdate() 
{
 CView::OnInitialUpdate();

 m_Info = new tagSYSTEMSTATE[64]; 
 for(int i=0;i<64;i++)
 { 
  m_Info[i].nState = 0;
  m_Info[i].bState = FALSE;
 }

 unsigned int nDummy;
 m_pThread=(HANDLE) _beginthreadex(NULL,0,Main_Thread_DI,this,CREATE_SUSPENDED,&nDummy);//开辟DI线程 

 if (!m_pThread) 
  TRACE(_T(" Couldn't start a threadn")); 
 else
  ResumeThread(m_pThread); 
}
//转线程进行采集的循环工作
UINT WINAPI CMy11View::Main_Thread_DI(LPVOID pParam)//控制DI线程

 CMy11View * pView=(CMy11View *)pParam;
 while(1)
 {
  pView->ptDeviceReadDIByte(); 
  pView->nVal++;
  pView->ShowMsg();
  Sleep(10);
 }
 return 0;
}
//下面是调用DLL进行信号采集工作
void CMy11View::ptDeviceReadDIByte()
{
 SHORT gnNumOfDevices;
 LONG DriverHandle = (LONG)NULL;
 USHORT gwChannel; 
 static PT_DioReadPortByte ptDioReadPortByte;
 USHORT gwValue; 
 gnNumOfDevices = 1; 
 DRV_DeviceOpen(gnNumOfDevices,//板号0;
 (LONG far *)&DriverHandle);
 for(gwChannel = 0; gwChannel < 8;gwChannel ++)
 {
  ptDioReadPortByte.port = gwChannel;//////////0-7通道号
  ptDioReadPortByte.value = (USHORT far *)&gwValue;
  DRV_DioReadPortByte(DriverHandle,
  (LPT_DioReadPortByte)&ptDioReadPortByte);
  gwValue=gwValue&0x00ff;/////////////////
  for(int j=0;j<8;j++)
  {
   if( (gwValue & (1<0) 
    m_Info[gwChannel*8+j].nState = 1;
   else
    m_Info[gwChannel*8+j].nState = 0;
  }
 } 
 DRV_DeviceClose((LONG far *)&DriverHandle); 
}
//下面将个通道点状态在界面输出,这里各位可以根据实际情况进行修改
void CMy11View::ShowMsg()
{
 CDC *pDC;
 pDC = GetDC();
 CRect rect;
 GetClientRect(&rect);
 CString strText;
 CBrush pNewBrush,*pOldBrush;
 pNewBrush.CreateSolidBrush(RGB(128,128,255));
 pOldBrush=pDC->SelectObject(&pNewBrush);
 pDC->FillRect(&rect,&pNewBrush); 
 COLORREF *oldCol;
 oldCol=(COLORREF *)pDC->SetTextColor(RGB(255,0,0));
 pDC->SetBkColor(RGB(128,128,255));
 pDC->TextOut(10,10,"采集模拟点显示信息:");
 strText.Format("线程采集程序运行了%d次",nVal);
 pDC->TextOut(10,35,strText);
 for(int i=0;i<64;i++)
 {
  strText.Format("第%.2d个结点的信息是:%d",i+1,m_Info[i].nState);
  int nHeight= (i/4)*25;
  int nWidth = (i%4)*180; 
  pDC->TextOut(10+nWidth,70+nHeight,strText);
 }
 pDC->SelectObject(&oldCol);
 pDC->SelectObject(&pOldBrush);
 pNewBrush.DeleteObject(); 
 pDC->DeleteDC(); 
}
//到此,DI输入编程基本结束,输出方法类似,这里不在进行叙述了.

  程序模拟演示界面可以见下:



//AD大致情况入DI,相应的主要不同在于板卡的采集程序,大致见下:
void CADDemoView::ptDeviceReadADByte()

 USHORT gwChannel = 0; // input channel 
 float gwValue; 
 SHORT gnNumOfDevices; 
 static PT_AIConfig ptAIConfig; // structure for AIConfig table
 static PT_AIVoltageIn ptAIVoltageIn; // structure for AIVoltageIn table
 static PT_DeviceGetFeatures ptDevFeatures;
 static DEVFEATURES DevFeatures; // structure for device features

 gnNumOfDevices = 0; 
 DRV_DeviceOpen(gnNumOfDevices,//板号0;
 (LONG far *)&DriverHandle);

 ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
 ptDevFeatures.size = sizeof(DEVFEATURES);
 DRV_DeviceGetFeatures(DriverHandle,//句标市柄
 (LPT_DeviceGetFeatures)&ptDevFeatures); 
 for(gwChannel = 0; gwChannel < 32;gwChannel ++)
 {
  Sleep(1);
  ptAIVoltageIn.chan = gwChannel;
  ptAIVoltageIn.gain = 0;
  ptAIVoltageIn.TrigMode = 0; // internal trigger
  ptAIVoltageIn.voltage = (FLOAT far *)&gwValue; 
  DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltageIn); 
  m_Info[gwChannel].fState = gwValue; 
 }

 DRV_DeviceClose((LONG far *)&DriverHandle);
}


  其实vc编程研华板卡不是一件很困难的事情,在他提供的光盘里面有vc的实例,我们可以根据实例进行修改就可以完成了.

相关文章

VC6.0编写C/S消息传送程序

网络编程已经成为一种时髦,以TCP IP协议的网络更为流行 自己编一个服务器与客户机互相传送消息的程序,以便增加自己网络编程的经验 下面我 ..

发布日期:2016-08-07 详细>>

大数据挖掘让PE/VC更高效

据国外媒体报道,作为硅谷风投公司Greylock Partners的数据科学家,对于泛滥的数据如何改变风投公司的运营方式,DJ&bull;帕蒂尔(DJ Patil ..

发布日期:2016-08-07 详细>>

http://www.jinyuankj.com/vc/20160807/36.html

VC++实现对远程计算机屏幕的监视

 在实际工程中,经常有施工现场和控制中心不在一起的情况,在这种情况一般多由工程技术人员往返穿梭其间来实现对远程施工现场的情况了解和 ..

发布日期:2016-08-07 详细>>

VC数据库编程分析

我们知道,在VB下进行基于ADO的编程相对比较简单,只要我们通过reference加载了适当的类型库以后,我们就可以正常的调用ADO对象,但是可能 ..

发布日期:2016-08-07 详细>>

工业控制研华板卡的VC编程实现

在论坛中经常有人提出关于研华工业用控制板卡的vc编程方法。此类板卡编程方法比较复杂,根据说明书上面说明我们可以采用两种编程方法,一种 ..

发布日期:2016-08-07 详细>>