【乐吾乐2D可视化组态编辑器】数据通信

External Player - 哔哩哔哩嵌入式外链播放器

乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/  

Meta2d.js支持 mqtt、websocket 和 http 轮询 3 种方式进行实时数据监听。

如果配置过 mqtt 或 websocket 或 http,下次打开时,会自动连接。

注意

浏览器(b/s)只支持ws(s)开头的协议。mqtt开头协议是c/s下使用的,不能用于浏览器。

MQTT

const params = {
  mqtt: 'url',
  mqttTopics: 'topic1/#,topoc2', // 多个主题用,分割
  mqttOptions: {
      clientId: 'string';
      username: 'string';
      password: 'string';
      // 如果clientId不为空,默认会随机重新生成一个clientId,避免连接冲突
      // 如果设置customClientId=true,不随机生成,使用用户自定义的固定的clientId
      customClientId: false;
    }
};

// 方式1
meta2d.connectMqtt(params);

// 方式2
meta2d.store.data.mqtt = params.mqtt;
meta2d.store.data.mqttTopics = params.mqttTopics;
meta2d.store.data.mqttOptions = params.mqttOptions;
meta2d.connectMqtt();

Copy

Websocket

const url = "url";

// 方式1
meta2d.connectWebsocket(url);

// 方式2
meta2d.store.data.websocket = url;
meta2d.connectWebsocket();

Copy

HTTP

const url = "/test"; // 可访问的 http
meta2d.store.data.http = url;
meta2d.store.data.httpTimeInterval = 500; // 轮询间隔时间, 默认 1000
meta2d.store.data.httpHeaders = {}; // 请求头设置
meta2d.connectHttp();

//新版
meta2d.store.data.https[i].http = url;
meta2d.store.data.https[i].method="POST"|"GET"; //设置请求方式 版本1.0.26以上支持
meta2d.store.data.https[i].httpTimeInterval = 500; // 轮询间隔时间, 默认 1000
meta2d.store.data.https[i].httpHeaders = {};
meta2d.connectHttp();

Copy

监听数据

Meta2d.js会自动监听数据并实时刷新。后台只需按照格式发送数据即可。

// 修改text
{
  id: 'pen1',
  text: 'new text'
}

// 修改所有tag为'tag'的颜色
{
  tag: 'tag',
  color: 'red'
}

// 修改绑定变量数据
{
  dataId: 'xxx',
  value: 'red'
}

// 批量修改
[{
  id: 'pen1',
  text: 'new text'
},{
  tag: 'tag',
  color: 'red'
}]

Copy

发送数据

当连接成功后,可以获取 mqtt.js 、websocket 客户端或http发送数据

// 仅连接成功后有效

// mqtt
meta2d.mqttClient.publish("event", "data");
// websocket
meta2d.websocket.send("data");
// http
fetch(url, {
    method: 'post',
    body: JSON.stringify(data),
    headers: {
      'Content-Type': 'application/json'
    }
});

Copy

解析自定义格式数据

当数据格式不是Meta2d.js可识别的数据格式时,可自定义解析

// 方式1:直接设置socket回调函数
//① version < 1.0.17 
meta2d.socketFn = (message, topic) => {
  // Do sth
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
};

//② version >= 1.0.17
meta2d.socketFn = (message, context) => {
  // Do sth
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
};

//③ version >= 1.0.46
meta2d.socketFn = (message, context) => {
  // Do sth
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
  /*let newMessage = fn(message); //伪代码,对message数据转化
  return newMessage; //将新的message数据代入到核心库处理。新的message需要满足“监听数据”里的格式
  */
};

// 方式2:socket回调函数js保存到图纸数据
// data = {...}
//① version < 1.0.17
data.socketCbJs = `
  // params: e - the message
  // params: topic - mqtt 有,ws 和 http 是空串
  constole.log(e, topic);
  // Do sth.
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
`;
// 自动监听
meta2d.open(data);

// 或
meta2d.store.data.socketCbJs = `
  // params: e - the message
  // params: topic - mqtt 有,ws 和 http 是空串
  constole.log(e, topic);
  // Do sth.
  meta2d.setValue(pen);

  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
`;
// 手动监听
meta2d.listenSocket();

//② version >= 1.0.17
data.socketCbJs = `
  // params: e - the message
  // params: context:{
  //         meta2d: meta2d对象,
  //         type:通信类型,
  //         url:通信地址,
  //         topic:mqtt-topic mqtt 有,ws 和 http 是空串
  //         }
  constole.log(e, context);
  // Do sth.
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
`;
// 自动监听
meta2d.open(data);

// 或
meta2d.store.data.socketCbJs = `
  // params: e - the message
  // params: context:{
  //         meta2d: meta2d对象,
  //         type:通信类型,
  //         url:通信地址,
  //         topic:mqtt-topic mqtt 有,ws 和 http 是空串
  //         }
  constole.log(e, topic);
  // Do sth.
  meta2d.setValue(pen);

  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
`;
// 手动监听
meta2d.listenSocket();


//③ version >= 1.0.46
data.socketCbJs = `
  // params: e - the message
  // params: context:{
  //         meta2d: meta2d对象,
  //         type:通信类型,
  //         url:通信地址,
  //         topic:mqtt-topic mqtt 有,ws 和 http 是空串
  //         }
  constole.log(e, context);
  // Do sth.
  meta2d.setValue(pen);
  
  //return false; //表示仅执行自定义的回调函数方法
  //return true; //表示除了执行自定义的回调方法外,还会执行核心库方法
  /*
    let newMessage = fn(JSON.parse(message)); //伪代码,对数据进行转化
    return newMessage; //将新的message数据代入到核心库处理。新的message需要满足“监听数据”里的格式
  */
`;

Copy

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值