Skip to main content

推送设置

About 2 min

推送设置

可以在该页面配置mqtt的服务器地址、端口号(一般为1883)、账号以及密码;配置MQTT代码后编辑通过后保存再打开推送开关后数据采集盒会自动的向设定的mqtt服务器推送数据

MQTT推送配置的一般流程为:

    1. 编写推送脚本
    1. 编译
    1. MQTT推送代码 保存(如果保存失败,多点几次,直到保存成功)
    1. 打开 开启推送的开关
    1. MQTT设置 保存
    1. 重启设备
RUNOOB 图标
RUNOOB 图标

可配置推送周期

任务调度周期支持使用CRON表达式

案例一

计划每分钟执行一次

  • cron表达式
    • 0 * * * * ?
  • 最近3次运行时间
    • 2022-09-05 22:29:00
    • 2022-09-05 22:30:00
    • 2022-09-05 22:31:00

案例二

计划每月1号执行1次

  • cron表达式
    • 0 0 0 1 * ? *
  • 最近3次运行时间
    • 2022-10-01 00:00:00
    • 2022-11-01 00:00:00
    • 2022-12-01 00:00:00

可配置c#脚本

案例一

  • c#脚本代码
using IRBox.Cnc;
using RBox.Application.BackgroundService;
using RBox.Cnc.Fanuc;
using RBox.Cnc.Mitsubish;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RBox.Cnc.Utils;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
using System.Text.Json;
using System.Dynamic;
using RBox.Core;

namespace RBox.Application
{
    public class MqttDynamicCode : IDeviceServiceHandler, IMQTTFunctionHandler
    {
        public IFanucService FanucService { get; set; }
        public IMitsubishCncService MitsubishCncService { get; set; }
        public Action<string, object> MqttHandler { get; set; }
        public Dictionary<string, IDevice> Devices { get; set; }

        public void MqttPushHandler(string deviceId)
        {
            var device = Devices[deviceId];//这样就能拿到设备对象,注意只能访问 不能修改
            try
            {
                var server = FanucService;

                dynamic pushObj = new ExpandoObject();

                pushObj.DeviceId = deviceId;
                pushObj.CreateTime = DateTime.Now;
                pushObj.HistoryId = Guid.NewGuid().ToString();
                pushObj.IsDeleted = false;
                pushObj.SRate = server.GetSrate();
                pushObj.FRate = server.GetFrate();
                pushObj.SpindleSpeed_Acts = server.GetActspeed();
                pushObj.SpindleSpeed_Actf = server.GetActfspeed();

                pushObj.CurrentStatus = new
                {
                    DeviceStatus = 7
                };

                var status = server.GetRunStatus();
                switch (status)
                {
                    case EnumGetStatinfo.Alarm:
                        pushObj.CurrentStatus = new
                        {
                            DeviceStatus = 8
                        };
                        break;
                    case EnumGetStatinfo.Run:
                        pushObj.CurrentStatus = new
                        {
                            DeviceStatus = 1
                        };
                        break;
                    case EnumGetStatinfo.Free:
                        break;
                    case EnumGetStatinfo.Off:
                        break;
                    default:
                        break;
                }

                pushObj.AlarmList = server.GetAlarm().Select(s => new
                {
                    No = s.No,
                    Msg = s.Msg
                }).ToList();

                var proTemp = server.GetExePrgName();

                pushObj.CurrrentPro = new
                {
                    ProName = proTemp.Name,
                    ProCode = proTemp.Number
                };
                pushObj.CurrentKnifeCode = server.GetKnifeCode();
                pushObj.OutPutTotal = new { ProductCount = server.GetProducts() };
                pushObj.CutTime = server.GetCutTime();
                pushObj.PowerOnTotalTime = server.GetPowerOnTime();
                pushObj.IsOnline = true;

                //第一个参数为主题,第二个参数是推送的消息

                MqttHandler(deviceId, pushObj);
                RBoxLog.PushLog(pushObj);

            }
            catch (DeviceOffLineExceltion)
            {
                //设备不在线
                var pushObj = new
                {
                    DeviceId = deviceId,
                    CreateTime = DateTime.Now,
                    HistoryId = Guid.NewGuid().ToString(),
                    IsDeleted = false,
                    CurrentStatus = new
                    {
                        DeviceStatus = 5
                    },
                    IsOnline = false,
                };


                MqttHandler(deviceId, pushObj);
                RBoxLog.PushLog(pushObj);
            }
            catch (Exception ex)
            {
                var msg = string.Format("Exception:\n{0}\n BaseException:\n{1} \n GetType:\n{2} \nMessage:\n{3}\n StackTrace:\n{4}", ex, ex.GetBaseException(), ex.GetType(), ex.Message, ex.StackTrace);

                RBoxLog.PushLog("推送异常" + ":" + msg);

            }
        }
    }
}



  • 推送的json(设备在线)
  {
	"DeviceId": "6259b8e1-7c35-4416-abc7-d233c3a694fa",
	"CreateTime": "2022-09-05T21:16:05.6645198+08:00",
	"HistoryId": "c2ba0591-bea6-46ea-972e-16c16020efcb",
	"IsDeleted": false,
	"SRate": 100,
	"FRate": 100,
	"SpindleSpeed_Acts": 999,
	"SpindleSpeed_Actf": 800,
	"CurrentStatus": {
		"DeviceStatus": 1
	},
	"AlarmList": [],
	"CurrrentPro": {
		"ProName": "O19",
		"ProCode": "19"
	},
	"CurrentKnifeCode": "10",
	"OutPutTotal": {
		"ProductCount": 23990
	},
	"CutTime": 28752912,
	"PowerOnTotalTime": 83854440,
	"IsOnline": true
}
  • 推送的json(设备离线)
{
	"DeviceId": "df0e0771-191e-474f-9e75-348e4dde55c6",
	"CreateTime": "2022-09-05T21:16:03.9053001+08:00",
	"HistoryId": "e18fae67-cbbf-4b46-a9be-77ee32ccf1a7",
	"IsDeleted": false,
	"CurrentStatus": {
		"DeviceStatus": 5
	},
	"IsOnline": false
}

在线Cron表达式

Last update:
Contributors: Gogs