概述
云腾一体机自带2路隔离CAN口。CAN口是双向通信,【CAN-请求】节点会根据配置生成对应的信息并下发,CAN-监听则会构造一个进程监听通道中的响应消息。
PS-1:如果CAN-请求节点有具体配置,则inject节点不应该包含payload信息,仅作激活作用。如果CAN-请求节点无配置,则inject节点可以新增msg.payload(报文)、msg.canid(报文标识符)。
PS-2:建议就在CAN-请求节点配置,便捷性更高。后续有两种方式的操作视频,请自行抉择。
输入
#如果CAN有具体配置,所以inject节点不应该包含payload信息,仅作激活作用。
msg.payload
输出
#标准CAN通道响应信息
msg.payload
#Modbus格式的应答帧(无校验)
msg.data
#应答帧长度
msg.dlc
#报文标识符
msg.canid
【CAN-请求】节点功能配置项
【CAN-请求】节点报文配置:
CAN通道信息配置:
【CAN-监听】节点配置
具体配置请参照厂家提供的设备说明书
示例
接入一个CAN通信的温湿度传感器
节点接线图:
const buf = msg.data;//得到的数据是buffer[7]
// var test = "";
var jsonObj ={};
if(buf == undefined || buf.length ==8){
return ;
}else{
//如果等于7;数据为[01,03,04,0D,98,0D,70]
var wenduStr = (buf[3]).toString(16).toUpperCase()
+(buf[4]).toString(16).toUpperCase();
var wendu = parseInt(wenduStr,16)/100;
var shiduStr = (buf[5]).toString(16).toUpperCase()
+(buf[6]).toString(16).toUpperCase();
var shidu = parseInt(shiduStr,16)/100;
// test = shiduStr;
jsonObj = {
"wendu":wendu,
"shidu":shidu
}
}
msg.payload = jsonObj
// msg.payload = test;
return msg;
演示视频
此处为语雀视频卡片,点击链接查看:AIoTedge-CAN通道.mp4
node-red完整流程代码
[{"id":"d41c8282958b8b21","type":"cansend","z":"65e54bc73a653e5d","name":"","config":"70a7bf7f85179807","canid":"","payload":"","x":720,"y":260,"wires":[]},{"id":"1f7ffc0334bdc243","type":"candump","z":"65e54bc73a653e5d","name":"","vconfig":"70a7bf7f85179807","x":400,"y":380,"wires":[["02a22a5319554bf6","e909ef8ddf6522b4"]]},{"id":"435561bff8680058","type":"inject","z":"65e54bc73a653e5d","name":"","props":[{"p":"payload"},{"p":"canid","v":"001","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[1,3,0,0,2,0,0,0]","payloadType":"bin","x":430,"y":260,"wires":[["d41c8282958b8b21"]]},{"id":"02a22a5319554bf6","type":"debug","z":"65e54bc73a653e5d","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":700,"y":380,"wires":[]},{"id":"e909ef8ddf6522b4","type":"function","z":"65e54bc73a653e5d","name":"function 1","func":"const buf = msg.data;//得到的数据是buffer[7]n// var test = "";nvar jsonObj ={};nif(buf == undefined || buf.length ==8){n return ;n}else{n //如果等于7;数据为[01,03,04,0D,98,0D,70]n var wenduStr = (buf[3]).toString(16).toUpperCase()n +(buf[4]).toString(16).toUpperCase();n var wendu = parseInt(wenduStr,16)/100;nn var shiduStr = (buf[5]).toString(16).toUpperCase()n +(buf[6]).toString(16).toUpperCase();n var shidu = parseInt(shiduStr,16)/100;n // test = shiduStr;n n jsonObj = {n "wendu":wendu,n "shidu":shidun }nn}nmsg.payload = jsonObjn// msg.payload = test;nnreturn msg;n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":480,"wires":[["3364cf2d39e1538d"]]},{"id":"3364cf2d39e1538d","type":"debug","z":"65e54bc73a653e5d","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":480,"wires":[]},{"id":"70a7bf7f85179807","type":"canconfig","channel":"can0","canchannel":"can1","bitrate":"250000"}]