Profinet 从站-传输浮点数
Profinet 原生不支持浮点数,但是有用户对浮点数的传输有需求,所以在当前版本只能使用两个 16 位寄存器拼接成一个浮点数。此应用主要是在示教器界面编程使用。
math 库中有两个函数,分别是 uint16 转浮点数的和浮点数转 uint16 的
out_float = math.words2float(in_low,in_high)
out_words = math.float2words(in_float)注意:PLC 的寄存器存储浮点数时,是高位在前,低位在后。math 库的浮点转换函数是低位在前高位在后。
预设场景:
PLC 发送 AO01 的模拟量输出 2.256 伏特给机器人,同时读取 AI01 的模拟量输入(为方便测试,硬件接线中,将 AO01 的输出接在了 AI01 的输入上,即 PLC 发送什么值,PLC 就会接收什么值,且 AO01 会输出等量的电压)。
基于以上预设场景,首先定义寄存器功能。此处需要交互的是浮点数,ARCS 的 Profinet 从站地址表暂不支持浮点数,此处使用两个 16 位寄存器存储一个浮点数。根据 Profinet 从站地址表可以知道,4 槽 5 槽是机器人和 PLC 交互寄存器的,16 位寄存器均从偏移 8 字节开始(0-7 字节为 bool 寄存器)。
PLC 设置:
将 4 槽的 8、9、10、11 四位地址用作接收机器人返回的,对应的机器人的寄存器为 int16Register[32]和 int16Register[33];将 5 槽的 8、9、10、11 四位地址用作给机器人发送的,对应的机器人的寄存器为 int16Register[0]和 int16Register[1];(此处是将机器人的 64 位寄存器前 32 位用作 5 槽,即 PLC 发送给机器人;后 32 位用作 4 槽,即机器人发送给 PLC)
此处 PLC 使用的是 S7-200 SMART ,上位机软件是 STEP 7-Micro/WIN SMART 。PLC 从站 4 槽 5 槽地址分配如下

即 QD136 为 PLC 端发送给机器人的地址,ID136 为 PLC 端接受自机器人的地址。此处 PLC 端简单实用监控表收发数据。
机器人示教器编程:
机器人端需要接收 int16Register[0]和 int16Register[1]的数据,转成浮点数设置进 AO01;然后读取 AI01 的值,拆分成 uint16 设置进 int16Register[32]和 int16Register[33],通过 Profinet 通信自动发送给 PLC
首先打开机器人 Profinet 从站,然后进行示教器编程,最后运行程序。

示教器编程如下 program.zip

注意:浮点转换函数都是低位在前,和 PLC 是反着的。故输入输出参数都是低位在前,使用时请注意
测试结果:
因为硬件接线是直接将 AO01 连接了 AI01,所以期望看到的现象是 ID136 的值时基本和 QD136 设置的值相同。
实际测试结果如下:

