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

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