威纶通触摸屏
西门子s7-300 PLC
运行emqttd的电脑
组建MQTT Broker。在emqttd官网下载程序,windows环境下载zip包,解压缩。win7可以安装为服务,也可以使用控制台模式。进入命令行,运行 emqttd cosole应当出现Erlang窗口,不出现,则按键Ctrl+C终止,再次运行命令。
打开浏览器(如谷歌,firefox),地址栏输入 127.0.0.1:18083用户名是admin,密码是public,可以进入emqttd的仪表台。在Tools--->Websocket里面,可以订阅Topic,查看客户端发来的数据。
遵循IEC 61131-3标准的PLC产品,梯形图大同小异,s7-300里使用LAD编程,上手很容易。这里使用系统块SFC1读取系统时间,并把值存储到DB33中第4字节起的8个字节内,分别存储:年,月,日,时,分,秒,毫秒+星期。我们只需要前6个字节。存储时间,是以BCD格式存储,了解这一点后,触摸屏里才好引用。对产品数数,光电触发一次,则将寄存器DB11.DBW6加1.可以将SFC1读出的日期,变换到字,也可以继续使用指针来传递数据。
使用指针来引用值,比较晦涩。但是对于SFC1返回的8个字节,使用指针访问,可以免去8步的数据转换。如图中,对时间设定值的访问,使用了指针。在DB数据块确定,编译后,值在PLC内存中的位置是固定的。
接着,要增加1个Topic,可以增加多个。主题格式,自己定义,网内有多个触摸屏做客户端,能把它们区分开就行。
Topic主题类似一个有很多格子的本子,我们要添加一行一行的记录、地址,加上内存。引用数量的地址,很好填入。时间的值,放入数组,长度是6,否则就得依次填6个地址。这里使用了地址,前缀是DBBn。点“设置”,可以做进一步修改。DBBn表示数据字节第n个,格式里没有8bit的选项,前面提到SFC1读取系统时间,然后以BCD格式存储,所以这里选择16Bit BCD,这样服务端拿到的值,不需要转换,可以直接使用。
下载到触摸屏,log窗口可以看到,有mqtt固件的下载。1分钟以后,触摸屏将数据发送到了服务端。在仪表台里,可以看到时间数据是一个数组,不需要任何转换,可以直接看到时间。因为PLC计数的清零,是以自己的系统时间为标准,所以数据+PLC系统时间来做数据记录是合适的。触摸屏加上的ts时间,PLC系统时间,MQTT服务器时间,选择PLC系统时间来作为计数发生的时间。如果,以Python+Flask实现HTML5页面,可以通过手机随时来查看数据。使用Paho库来订阅topic,发来的数据是json格式,python使用字典方式操作很简便。{ "d" : { "yc" : [ 0 ], "yr" : [ 0 ], "tc" : [ 0 ], "tb" : [ 0 ], "jg" : [ 0 ], "tm" : [ 19, 7, 20, 18, 39, 9 ] }, "ts" : "2019-07-20T18:37:02.691798" } { "d" : { "xy" : [ 0 ], "qm" : [ 652 ], "tm" : [ 19, 7, 20, 18, 37, 32 ] }, "ts" : "2019-07-20T18:38:02.723322" } 需要解析d包含的数据,d可以包含多个地址的数据。
使用linux环境架设mqtt服务,比较可靠。
emqttd社区版,对小规模应用足够。
利用开源软件,完全可以实现自己的工业4.0,譬如在线监控电机温度。