在亿佰特介绍了西门子PLC如何通过函数块连接MQTT服务器和发布消息,前文为大家介绍如何通过函数与函数块实现MQTT云消息的订阅,介绍到了MQTT服务器下发数据分析部分,本文接着讲述PLC程序分析和数据下发测试。
PLC程序分析 每个变量的提取过程都是类似的,我们可以将其封装为函数块方便多次调用,先创建FC函数块,选择LAD语言,如下图: 先定义输入变量: 如下: main_str:待解析字符串,云平台下发的字符串; Compare_str:解析字段,需要从云平台提取的有效数据标签; outdata_type:数据类型,解析后输出的数据类型,0(Uint)、1(Real)、2(String); 输出变量如下: DONE:输出解析状态,非零有效,为零代表输入的“main_str”不包含“Compare_str”解析失败; valid_value_int:解析的整形结果,非整形该输出无效; valid_value_real:解析的浮点数结果,非浮点该输出无效; valid_str:输出的字符串,非字符串输出无效; 还需要定义一些中间变量,主要用来存储转换所需要的条件和转换的中间结果,就不再赘述。 上图为判断该输入的待解析字符串是否存在解析字段,若有输出位置信息,再将其转换为相对偏移地址用于后续有效数据提取。 上图为不同类型数据调用不同的解析方法,上一章已经介绍过原理了,LAD编程语言不太适合这种功能的实现,使用STL语言就要简洁的多,有机会再给大家介绍。 在创建一个FB(函数块)将需要解析的字段放在一个函数块内方便后续维护, 在飞燕平台定义如下参数: 同样的也需要定义一些输出变量方便主程序将提取结果配置给对应设备,我这里只通过在线调试演示没有正式设备,输出变量定义如下: luminance:光照强度; luminance_set_en,是否修改,非零代表存在修改; 类似方法定义剩余的两个变量,如下图所示: 先将Mqtt函数块收到的云平台下发数组转换为字符串,用于其他步骤使用; 调用刚才创建的有效数据提取函数(get_server_srt_validdata),输入需要解析的数据和字段(“luminance”:)以及变量类型”0“; 在通过变量“luminance_set_en“判断数据点是否存在修改,若存在则将提取到的有效数据输出,若不存在则不进行输出; 后面的“speed”与“DO1”采用相同的配置方法。 接下来就是在主程序中调用该函数块实现MQTT订阅消息的解析,第一步创建自动订阅功能,通过下图方法,将在请求连接后的10s自动进行订阅; 再调用解析函数块; 四、数据下发测试 进入设备详情的在线调试界面选择属性调试,方法采用设置发送下列字符串; PLC成功解析数据; 下次为大家介绍云智能APP的制作。
|