赞
踩
声明:本文章学习自用,部分资料来自对罗伯特祥的汇总,感谢先人
目录
3.3Platinum Maestro运动控制器 —— 问题记录
2.基于Platinum Maestro的运动控制系统的软件结构
在机器运行期间,主机(在本例中,主机可以是PC机、PLC或HMI)通常执行用户开发的应用程序。
这个应用程序执行顶层机器序列,也可以选择执行与轴向运动序列无关的其他任务,如用户界面、图像分析、条形码界面等,这可能是机器所需要的。
在主机为PC机的情况下,Elmo提供了GMAS函数块库,这是一个静态库,所有函数块都可以通过TCP/IP访问,这是Platinum Maestro的各种功能。用户将这个库与他的应用程序链接起来,因此可以使用库中包含的任何函数轻松地访问Platinum Maestro。
如果主机基于PLC或HDMI (Elmo不为这些设备提供任何库),用户应该使用TCP/IP支持的白金Maestro标准协议(目前Elmo支持TCP/IP上的MODBUS)。
在开发或维护阶段,主机(在本例中为PC计算机)运行由Elmo提供的特殊开发和维护/配置软件模块,以支持白金Maestro和驱动器的配置/设置/编程。
EASII - Elmo Application Studio软件是一个集多种功能于一体的环境,它支持与系统配置、设置、调优、运动和编程相关的所有任务。它用于整个系统(配置)、白金大师(设置、多轴运动)和终端单元(驱动器(配置、设置、调优向导、运动和编程)。
EASII使用与应用程序相同的静态库(GMAS函数块库),通过TCP/IP访问Platinum Maestro功能。
是一个网络多轴运动控制器,从主机(通过TCP/IP)获得高级运动或操作模式请求,并相应地管理实际机器的运动和序列,通过设备网络访问终端单元(驱动器、I/O控制器等),可以是can(使用can Open标准协议)或EtherCAT(使用CANopen over EtherCAT - CoE -标准协议)。是一个嵌入式计算机,运行LINUX操作系统和至少一个软件进程:内置的白金大师固件,由Elmo作为白金大师的一部分提供。开机后自动运行Platinum Maestro固件,完成以下任务:
更多信息参见萝卜先人的文章:
Elmo运动控制器 —— Maestro Software结构和接口_罗伯特祥的博客-CSDN博客_elmo控制器
终端单元(伺服驱动器、I/Os控制器、网络编码器等)连接到白金大师通过一个设备网络。白金大师支持两个设备网络之一:CAN或EtherCAT。Platinum Maestro固件负责管理设备网络,并根据该网络的标准,以同步方式执行所有必要的通信。一般来说,用户不需要知道设备网络的细节,因为所有的细节都是由Platinum Maestro自动处理的。
3.main() 程序结构
- int main() {
-
- // Initialize system, axes and all needed initializations
- MainInit();
-
- // Execute the state machine to handle the system sequences and control
- MachineSequences();
- // Close what needs to be closed before program termination
- MainClose();
- return 1; // Terminate the application program back to the Operating System
- }
main()以对MainInit()的调用开始,MainInit()执行所有程序和系统的初始化(稍后将在手册示例中详细介绍)。在完成所有初始化之后,调用MachineSequences()函数。该函数有意地启动机器序列和运动的执行。在机器运行过程中,函数不会返回到main(),直到程序请求终止(由于错误,用户请求关闭,等等)。当机器操作完成时,machine Sequences()函数返回main(), main()调用MainClose()函数来关闭程序终止之前需要关闭的所有内容。这是程序的main()函数。尽可能简单和干净。
MachineSequences()函数:查找机器序列的实现,使用状态机结构。
请注意,红色的代码块是一段需要尽可能快地执行的代码,不应该包含任何执行时间或延迟相对较长的进程,它无条件地执行有限大小的代码,没有延迟或等待。
以下是相应的代码示例:
- /*============================================================================
- Function: MachineSequences()
- Input arguments: None.
- Output arguments: None.
- Returned value: None.
- Version: Version 1.00
- Updated: 10/03/2011
- Modifications: N/A
-
- Description:
-
- Starts the Main Timer function that will execute the states machines
- to control the system. Also performs a slow background loop for
- less time-critical background processes and monitoring of requests
- to terminate the application.
- ============================================================================*/
- void MachineSequences()
- {
-
- // Init all variables of the states machines
- MachineSequencesInit();
-
- // Enable MachineSequencesTimer() every TIMER_CYCLE ms
- EnableMachineSequencesTimer(TIMER_CYCLE);
-
- // Background loop. Handles termination request and other less time-critical background proceses
-
- while (!giTerminate)
- {
- MachineSequencesTimer(0);
-
- // Execute background process if required
- BackgroundProcesses();
-
- // Sleep for ~SLEEP_TIME micro-seconds to reduce CPU load
- usleep(SLEEP_TIME);
- }
-
- // Termination requested. Close what needs to be cloased at the states machines
- MachineSequencesClose();
-
- return; // Back to the main() for program termination
- }
- /*
- ============================================================================
- Name : test_pmas.cpp
- Author :
- Version :
- Description : GMAS C++ project source file
- ============================================================================
- */
-
- #include "test_pmas.h"
- #include <iostream>
- #include "MMC_Definitions.h"
- #include "mmcpplib.h"
- #include <sys/socket.h>
-
- using namespace std;
-
-
- int CallbackFunc(unsigned char* recvBuffer, short recvBufferSize,void* lpsock){
-
- }
-
- int main()
- {
- cout << "Hello, world!" << endl;
-
- CMMCConnection cConn ;
- MMC_CONNECT_HNDL gConnHndl = cConn.ConnectIPCEx(0x7fffffff,(MMC_MB_CLBK)CallbackFunc) ;
- CMMCHostComm cHost;
- cHost.MbusStartServer(gConnHndl,1);
-
- while(true){
- MMC_MODBUSREADHOLDINGREGISTERSTABLE_OUT mbus_read_out;
- cHost.MbusReadHoldingRegisterTable(0,9,mbus_read_out) ;
- for(int i=0;i<9;i++){
- cout<<"address ["<<i<<"] = "<<mbus_read_out.regArr[i]<<endl;
- }
- cout<<"==============================================="<<endl;
- sleep(2);
- }
-
-
- return 0;
- }
-
修改完注意保存,保存之后就是永久修改。
所以一定不要忘了修改后的IP,如果忘了只能通过USB去查看
Platinum Maestro运动控制器 —— 问题记录_罗伯特祥的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。