Power PMAC与上位机的Modbus通信

  • 1. 启动modbus服务器
  • 2. 用户共享内存缓冲区变量说明
  • 3. 读取和发送数据
    • 3.1 发送数据
    • 3.2 读取数据
  • 4. EtherCAT网络的使能
  • 声明

1. 启动modbus服务器

将以下程序写入全局变量文件中,建议新建一个单独的文件modbus.pmh文件来存放以下代码:

/**********************************************/
// 作 用:  设置Modbus服务器的通信IP及ID号
//  @     Jack Soong
// Time:  2019.02.21
/**********************************************/
Modbus[0].Config.ServerPort = 0 // (默认Modbus port 502)
//超时设置
Modbus[0].Config.ConnectTimeOut = 6000 // 0, defaults to OS timeout, minimum = 5200 msec timeout)
Modbus[0].Config.SendRecvTimeOut = 0 // 0, defaults to 6300 msec timeout 5 of 6 Retransmissions)Modbus[0].Config.UnitID = 4 //与Modbus消息一起发送的单元ID,如果Modbus设备只有一个,可不用// 设置服务器IP为192.168.0.200
Modbus[0].Config.ServerIpAddr[0]=192
Modbus[0].Config.ServerIpAddr[1]=168
Modbus[0].Config.ServerIpAddr[2]=0
Modbus[0].Config.ServerIpAddr[3]=200Sys.ModbusServerEnable = 1  // 使能modbus服务器

2. 用户共享内存缓冲区变量说明

请查看手册《Power PMAC Users Manual》P493、P494

用户共享内存缓冲区数据结构如下表所示(重要!!!):

其中Cdata可表示byte型数据,Udata可表示无符号int型数据,Idata可表示int型数据,Fdata可表示float型数据,Ddata可表示double型数据。

以上数据结构表示的仅仅是一种读取内存数据的方式,实际上在内存中存储的数据都是01表示的二进制,举例说明:Udata[100]、Idata[100]、Fdata[100]读取的是同一块内存区100,只不过是通过不同的数据类型读的而已。

3. 读取和发送数据

读取和发送数据都要通过PMAC的ModbusServerBuffer缓存器来实现,一个Buffer缓存器是8bit,即对应上表中的一个Cdata。

上图中,↑↓表示对应的读取和发送数据,应避免上位机和PMAC同时向同一块缓存区中发送数据。

ModbusServerBuffer序号是从0开始的,即第一个缓存器为Sys.ModbusServerBuffer[0]

每个buffer代表什么意思需要由写上位机程序员和PMAC程序开发者两位工程师共同商讨,即确定通讯的协议内容。

注意,数据的读取和发送会涉及Modbus通信的字序问题和数据的存储问题,不懂的请参考博文《基础笔记3 —— 关于大小端数据存储方式的转换及测试说明》、《数据类型在内存中的存储》。

3.1 发送数据

比较简单,直接给Buffer缓存器赋值即可。

// 浮点数的发送
Sys.Fdata[200] = 178.35
Sys.ModbusServerBuffer[4] = (Sys.Udata[200] & 16711680) >> 16
Sys.ModbusServerBuffer[5] = (Sys.Udata[200] & 4278190080) >> 24
Sys.ModbusServerBuffer[6] = (Sys.Udata[200] & 255)
Sys.ModbusServerBuffer[7] = (Sys.Udata[200] & 65280) >> 8// 符号整型数据的发送
Sys.Idata[200] = 100
Sys.ModbusServerBuffer[0] = (Sys.Udata[200] & 16711680) >> 16
Sys.ModbusServerBuffer[1] = (Sys.Udata[200] & 4278190080) >> 24
Sys.ModbusServerBuffer[2] = (Sys.Udata[200] & 255)
Sys.ModbusServerBuffer[3] = (Sys.Udata[200] & 65280) >> 8// 标志位的发送
statu1 = 1
statu2 = 0
statu3 = 0
statu4 = 1
statu5 = 1
statu6 = 0
Sys.Cdata[0] = (statu1<<7) | (statu2<<6) | (statu3<<5) | (statu4<<4) | (statu5<<3) | (statu6<<2);
Sys.ModbusServerBuffer[1] = Sys.Cdata[0];

需要注意,由于设备的不同,Modbus缓存器读取的起始位可能为0,也可能为1,使用的时候需要测试/确认一下。

3.2 读取数据

// float数据的接收
Sys.udata[100] = (Sys.ModbusServerBuffer[0]<<16)|(Sys.ModbusServerBuffer[1]<<24)|Sys.ModbusServerBuffer[2]|(Sys.ModbusServerBuffer[3]<<8)
x_val = Sys.Fdata[100];// int数据的接收
Sys.udata[100] = (Sys.ModbusServerBuffer[0]<<16)|(Sys.ModbusServerBuffer[1]<<24)|Sys.ModbusServerBuffer[2]|(Sys.ModbusServerBuffer[3]<<8)
x_val = Sys.Idata[100];// bit数据的接收
Sys.udata[100] = (Sys.ModbusServerBuffer[0]<<16)|(Sys.ModbusServerBuffer[1]<<24)|Sys.ModbusServerBuffer[2]|(Sys.ModbusServerBuffer[3]<<8)
statu1 = Sys.Idata[100]>>31;

4. EtherCAT网络的使能

使用以下cmd命令来实现

ECAT[0].Enable = 1

通常我们希望其在PMAC一上电就使能,即在PLC程序中实现,那么在初始化PLC中我们可以写入以下代码:

cmd"ECAT[0].Enable = 1"       //激活EtherCAT

如果实现连接失败后的重连动作,可用以下代码实现:

// @ Jack Sooncmd"ECAT[0].Enable = 1"        //激活EtherCATcall Timer(15)              //延时15秒等待EtherCAT连接if(ECAT[0].Enable == 0)      //如果EtherCAT连接失败,重置EtherCAT,继续连接,否则发送错误代码{   cmd"ecat reset"call Timer(5)cmd"ECAT[0].Enable = 1"call Timer(15)if(ECAT[0].Enable == 0){Ecat_error=1;}}else{Ecat_error=0;}

声明

  • 手册中的截图,版权归欧姆龙所有,本人在此声明引用。

至此,Power PMAC的使用基本教程结束,《工程实践例程》有时间再更,不明白的可以一起探讨。

Power PMAC运动控制器 —— 学习笔记6相关推荐

  1. Power PMAC运动控制器 —— 学习笔记1

    Power PMAC运动控制器--学习笔记1 说明 1. 硬件介绍 2. 准备工作 3. PMAC与上位机的连接 4. 创建自己的伺服控制项目 5. 程序下载流程 6. 学习途径 后记     有很多 ...

  2. Power PMAC运动控制器 —— 学习笔记3

    Power PMAC中运动程序的编写 -- 下 1. 坐标系和轴定义 1.1 轴定义 1.2 坐标系定义 1.3 坐标系及轴的定义例程 2. 运动模式的介绍 2.1 相对模式与绝对模式 2.2 运动模 ...

  3. Power PMAC运动控制器 —— 学习笔记2

    Power PMAC中运动程序的编写 -- 上 0. 说明 1. Power PMAC与驱动器的的连接 2. Power PMAC中Project的结构树介绍(重要!) 3. 硬件在控制器中的配置(重 ...

  4. Power PMAC运动控制器 —— 学习笔记7

    本文主要说明Power PMAC中EtherCAT通信的驱动器下循环力矩模式(CST)的使用,主要通过操作PDO实现,对于循环速度模式(CSV)同上. 第一步:设置System时钟(默认1kHz),E ...

  5. 【PMAC学习笔记——第0篇】初识PMAC运动控制卡以及 Microsoft Visual C++ 2019,PeWin32 PRO2环境搭建

    一.PMAC概述 PMAC ( Programmable Multi-Axis Controller) 可编程多轴运动控制器,是美国Delta Tau Data System 公司推出的PC 机平台上 ...

  6. Microsoft Power BI 学习笔记

    ​   Power Bi 学习笔记 一   Power BI 是微软发布的一系列的软件服务.应用和连接器,这些软件服务.应用和连接器协同工作,将不相关的数据源转化为合乎逻辑.视觉上逼真的交互式见解. ...

  7. 2015.05.15,外语,学习笔记-《Word Power Made Easy》 01 “如何讨论人格特点”

    2015.03.17,外语,读书笔记-<Word Power Made Easy> 01 "如何讨论人格特点"学习笔记 SESSIONS 1 本来这些章节都是在一两年前 ...

  8. Power BI学习笔记

    Power BI学习笔记 友好建议 1.excel文件.xls,.xlsx导入到Power BI经常会出现错误,建议保存和导入.csv格式表格 2.如果表格已经加载进来,对表格进行修改后,直接点击刷新 ...

  9. UE5 Shader基础学习笔记——13-20 DetailNormal/Smoothstep/Length/CeilFloorRound/DDXDDY/SinCos/Power

    UE5 Shader基础学习笔记--13-20 DetailNormal/Smoothstep/Length/CeilFloorRound/DDXDDY/SinCos/Power Lec13 Deta ...

最新文章

  1. webservice入门程序学习中经验总结
  2. day58-activiti 02-历史数据查询
  3. 增强学习(Reinforcement Learning and Control)
  4. pycharm 快捷键介绍
  5. maven不配置环境变量可以使用吗_哪些土地可以不缴纳土地使用税?包括农村地吗?...
  6. 汇编中的函数调用与递归
  7. vue css load,vue css3loadding插件的开发以及npm包的发布管理
  8. 2021年360奢侈品用户观察报告
  9. BEC translation exercise 4
  10. jmeter报告分析工具
  11. echarts 去掉Y轴分割线
  12. Arturia Prophet V3 for Mac(多功能仿真音乐合成器)
  13. 客户说发货慢怎么回复_给客户发完报价没回复,怎么办?
  14. 并发编程学习之原子变量类
  15. 数学建模算法与应用习题1-3 解析 MATLAB 整数规划
  16. 傅里叶变换 FFT 频谱泄漏?
  17. java 汇率转换_汇率转换 实现了一个用于多币种之间汇率转换的程序 联合开发网 - pudn.com...
  18. python地图 两点距离_使用python计算google地图中两点之间的距离
  19. xml 硕正报表_硕正轻量级富Web应用套件–硕正报表主要指标及功能清单
  20. c语言程序设计 滴水视频,编程达人滴水中级班视频教程

热门文章

  1. 联想服务器X系列和sr系列,强势出击!联想发布ThinkSystem服务器,替代X系列
  2. 1058人名查询(sdnuoj)
  3. 计算机病毒课程设计论文,计算机病毒毕业设计论文.doc
  4. 【题解】LOJ6060 Set(线性基)
  5. python好看的流星雨代码,python流星雨代码解释
  6. 输入法(InputMethodService)生命周期解读
  7. HTML5期末考核大作业:美食主题网站设计——沪上美食(9页)带Flash动画视频导航下拉表单 HTML+CSS+JavaScript (1)
  8. 【多线程与AfxGetMainWnd 窗口 与 线程 有必然联系吗? 命名空间】
  9. java中的 | ^ 分别是什么?
  10. 更新Ubuntu系统报错: Err http://mirrors.163.com lenny Relese.gpg Temporary failure resolving 'mirro