当前位置:   article > 正文

【嵌入式】Elmo—PMAS编程标准_elmo控制器使用外部库

elmo控制器使用外部库

 声明:本文章学习自用,部分资料来自对罗伯特祥的汇总,感谢先人

目录

1 编码要求:

2 整个运动控制系统主要分为三层:

3 杂项

 3.1 实现简单的modbus数据读取

3.2 修改控制器IP

3.3Platinum Maestro运动控制器 —— 问题记录


1 编码要求:

  • 代码不应该包含数字。常量应该在相关的头文件中定义,常量的值应该只在头文件中定义。包括像“0”和“1”这样的值。定义OK和NOT_OK(和/或类似地,如TRUE,FALSE)。
  • 每个函数前面都应该有一些注释行,包括做什么、输入和输出参数、作者、版本

2.基于Platinum Maestro的运动控制系统的软件结构

在这里插入图片描述

2 整个运动控制系统主要分为三层:

  • Host 

在机器运行期间,主机(在本例中,主机可以是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功能。

  • Platinum Maestro

是一个网络多轴运动控制器,从主机(通过TCP/IP)获得高级运动或操作模式请求,并相应地管理实际机器的运动和序列,通过设备网络访问终端单元(驱动器、I/O控制器等),可以是can(使用can Open标准协议)或EtherCAT(使用CANopen over EtherCAT - CoE -标准协议)。是一个嵌入式计算机,运行LINUX操作系统和至少一个软件进程:内置的白金大师固件,由Elmo作为白金大师的一部分提供。开机后自动运行Platinum Maestro固件,完成以下任务:

  • 与主机的TCP/IP通信
  • 与在Platinum Maestro运行的可选用户应用程序进行进程到进程的通信
  • 管理可能从主机(通过TCP/IP)和/或从用户应用程序(在Platinum Maestro本身运行)到达的所有函数块调用
  • 多轴运动控制。这是铂金Maestro固件的核心,它负责执行所有的轨迹,控制,事件和同步算法,创建一个多轴运动控制器
  • 设备网络(CAN或EtherCAT)的管理和与终端的通信

在这里插入图片描述

更多信息参见萝卜先人的文章:

Elmo运动控制器 —— Maestro Software结构和接口_罗伯特祥的博客-CSDN博客_elmo控制器

  • 设备网络

终端单元(伺服驱动器、I/Os控制器、网络编码器等)连接到白金大师通过一个设备网络。白金大师支持两个设备网络之一:CAN或EtherCAT。Platinum Maestro固件负责管理设备网络,并根据该网络的标准,以同步方式执行所有必要的通信。一般来说,用户不需要知道设备网络的细节,因为所有的细节都是由Platinum Maestro自动处理的。

3.main() 程序结构

在这里插入图片描述

  1. int main() {
  2. // Initialize system, axes and all needed initializations
  3. MainInit();
  4. // Execute the state machine to handle the system sequences and control
  5. MachineSequences();
  6. // Close what needs to be closed before program termination
  7. MainClose();
  8. return 1; // Terminate the application program back to the Operating System
  9. }

main()以对MainInit()的调用开始,MainInit()执行所有程序和系统的初始化(稍后将在手册示例中详细介绍)。在完成所有初始化之后,调用MachineSequences()函数。该函数有意地启动机器序列和运动的执行。在机器运行过程中,函数不会返回到main(),直到程序请求终止(由于错误,用户请求关闭,等等)。当机器操作完成时,machine Sequences()函数返回main(), main()调用MainClose()函数来关闭程序终止之前需要关闭的所有内容。这是程序的main()函数。尽可能简单和干净。

MachineSequences()函数:查找机器序列的实现,使用状态机结构。

在这里插入图片描述

 请注意,红色的代码块是一段需要尽可能快地执行的代码,不应该包含任何执行时间或延迟相对较长的进程,它无条件地执行有限大小的代码,没有延迟或等待

 以下是相应的代码示例:

  1. /*============================================================================
  2. Function: MachineSequences()
  3. Input arguments: None.
  4. Output arguments: None.
  5. Returned value: None.
  6. Version: Version 1.00
  7. Updated: 10/03/2011
  8. Modifications: N/A
  9. Description:
  10. Starts the Main Timer function that will execute the states machines
  11. to control the system. Also performs a slow background loop for
  12. less time-critical background processes and monitoring of requests
  13. to terminate the application.
  14. ============================================================================*/
  15. void MachineSequences()
  16. {
  17. // Init all variables of the states machines
  18. MachineSequencesInit();
  19. // Enable MachineSequencesTimer() every TIMER_CYCLE ms
  20. EnableMachineSequencesTimer(TIMER_CYCLE);
  21. // Background loop. Handles termination request and other less time-critical background proceses
  22. while (!giTerminate)
  23. {
  24. MachineSequencesTimer(0);
  25. // Execute background process if required
  26. BackgroundProcesses();
  27. // Sleep for ~SLEEP_TIME micro-seconds to reduce CPU load
  28. usleep(SLEEP_TIME);
  29. }
  30. // Termination requested. Close what needs to be cloased at the states machines
  31. MachineSequencesClose();
  32. return; // Back to the main() for program termination
  33. }

在这里插入图片描述

在这里插入图片描述

3 杂项

 3.1 实现简单的modbus数据读取

  1. /*
  2. ============================================================================
  3. Name : test_pmas.cpp
  4. Author :
  5. Version :
  6. Description : GMAS C++ project source file
  7. ============================================================================
  8. */
  9. #include "test_pmas.h"
  10. #include <iostream>
  11. #include "MMC_Definitions.h"
  12. #include "mmcpplib.h"
  13. #include <sys/socket.h>
  14. using namespace std;
  15. int CallbackFunc(unsigned char* recvBuffer, short recvBufferSize,void* lpsock){
  16. }
  17. int main()
  18. {
  19. cout << "Hello, world!" << endl;
  20. CMMCConnection cConn ;
  21. MMC_CONNECT_HNDL gConnHndl = cConn.ConnectIPCEx(0x7fffffff,(MMC_MB_CLBK)CallbackFunc) ;
  22. CMMCHostComm cHost;
  23. cHost.MbusStartServer(gConnHndl,1);
  24. while(true){
  25. MMC_MODBUSREADHOLDINGREGISTERSTABLE_OUT mbus_read_out;
  26. cHost.MbusReadHoldingRegisterTable(0,9,mbus_read_out) ;
  27. for(int i=0;i<9;i++){
  28. cout<<"address ["<<i<<"] = "<<mbus_read_out.regArr[i]<<endl;
  29. }
  30. cout<<"==============================================="<<endl;
  31. sleep(2);
  32. }
  33. return 0;
  34. }

3.2 修改控制器IP

修改完注意保存,保存之后就是永久修改。
所以一定不要忘了修改后的IP,如果忘了只能通过USB去查看

3.3Platinum Maestro运动控制器 —— 问题记录

Platinum Maestro运动控制器 —— 问题记录_罗伯特祥的博客-CSDN博客

 PMAS/GMAS使用笔记(个人笔记)_罗伯特祥的博客-CSDN博客

PMAS控制器中modbus通信 - 古月居 (guyuehome.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/349878?site
推荐阅读
相关标签
  

闽ICP备14008679号