控制系统软件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

控制系统软件设计

在本论文中,我们采用pro-motion软件作为多轴工业CT运动控制系统的控制软件,相对于运动控制卡的方式,很展现出很大的提升,比如在系统的同步控制、多轴运动控制和程序的执行性方面。

1.1 软件简介

1.1.1 连接控制器

在安装结束软件后,运行软件,会弹出“接口”的对话框,我们需要对其进行设置,如下图:

图1.1 pro-motion设置界面

1.1.2 配置的设置

在配置电机轴之前,我们首要选择配置的轴。可以在窗口中直接选择要配置的轴,被选中的轴将以蓝色背景标识,如下图:

3

图1.2 选中配置轴

图1.3 pro-motion输入波形选择

如上图,根据向导可一步步设置,比如交流和直流、有刷与无刷等,最终成为我们所需求的电机。

1.2 pro-motion软件工作环境

整个运动控制系统可以简单的使用软件来操作,在pro-motion软件中,我们可以看到控制系统的组成,如下图:

图1.4 控制系统原理图

我们可以看出,整个系统是一个反馈回路,系统会对反馈结果进行计算与修正,这使得我们能更加精确地、快速的控制工业CT平台,达到更好的要求。

1.2.1 编程语言

因为C语言具有简洁方便等特点,我们使用C语言程序对该系统进行编写,使得其控制整个运动平台,其中包括平台初始化部分、接口部分、执行程序部分等。

对于工业CT控制系统的软件设计必须要实现运动控制的功能,此外,还有大量的变量处理和参数计算,因此需要所编写程序的全面,来实现命令的发送和接收,以及状态的反馈、扫描参数的计算等功能。以下是为该系统所编写的一套C语言程序:

//********************************************************

// PMDRPperiph.cpp

// PMD Prodigy/CME Resource Protocol wrapper class implementation

//********************************************************

//#include "stdafx.h"

#include

#include "PMDRPperiph.h"

//********************************************************

// generic RP protocol wrapper class

PMDRPperiph::PMDRPperiph(PMDPeriphHandle* hPeriph)

{

m_hPeriph = hPeriph;

}

void PMDRPperiph::WriteByte(char byte)

{

PMDPeriphSend(m_hPeriph, &byte, 1, TIMEOUT);

}

void PMDRPperiph::ReadByte(char* byte)

{

PMDErrorCode result;

PMDparam nReceived;

result = PMDPeriphReceive(m_hPeriph, byte, &nReceived, 1, TIMEOUT);

if (PMD_ERR_OK != result)

throw result;

}

int PMDRPperiph::SendPacket(char* pbuff, int nCount)

{

if (PMD_ERR_OK != PMDPeriphSend(m_hPeriph, pbuff, nCount, TIMEOUT))

return 0;

return nCount;

}

int PMDRPperiph::ReceivePacket(char* pbuff, int nMaxCount, int timeout)

{

PMDparam nReceived = 0;

PMDErrorCode result;

result = PMDPeriphReceive(m_hPeriph, pbuff, &nReceived, nMaxCount, timeout);

if (PMD_ERR_OK != result)

throw result;

return nReceived;

}

//********************************************************

// COM port protocol is slightly different

PMDRPperiphCOM::PMDRPperiphCOM(PMDPeriphHandle* hPeriph) : PMDRPperiph(hPeriph)

{

m_Address = 0;

}

void PMDRPperiphCOM::SetAddress(int address)

{

m_Address = address;

}

int PMDRPperiphCOM::SendPacket(char* pbuff, int nCount)

{

char address = (char)m_hPeriph->address;

char checksum = 0;

char packetlength = nCount;

for (int i=0; i

{

checksum += pbuff[i];

}

if (address > 0)

WriteByte(address);

WriteByte(checksum);

WriteByte(packetlength);

相关文档
最新文档