arduino - arduino 作为 modbus RS485 从机向主机发送消息
问题描述
我会说法语,请原谅我糟糕的英语。我正在研究 2 个 arduino megas 之间的 rs485 modbus 通信。我希望从机向主机发送例如值“10”。在从机上,我使用库https://github.com/yaacov/ArduinoModbusSlave的示例:
#include <ModbusSlave.h>
// explicitly set stream to use the Serial serialport
Modbus slave(Serial, 1); // stream = Serial, slave id = 1, rs485 control-pin = 8
void setup() {
// register handler functions
slave.cbVector[CB_READ_INPUT_REGISTERS] = ReadAnalogIn;
// slave.cbVector[CB_READ_HOLDING_REGISTERS] = readMemory;
// start slave at baud 9600 on Serial
Serial.begin( 9600 ); // baud = 9600
slave.begin( 9600 );
}
void loop() {
// listen for modbus commands con serial port
slave.poll();
}
// Handel Read Input Registers (FC=04)
uint8_t ReadAnalogIn(uint8_t fc, uint16_t address, uint16_t length) {
// write registers into the answer buffer
for (int i = 0; i < length; i++) {
uint16_t res;
res = 221;
//slave.writeRegisterToBuffer(i, analogRead(address + i));
slave.writeRegisterToBuffer(i,10);
}
return STATUS_OK;
}
在主人上,我使用图书馆中的一个例子https://github.com/4-20ma/ModbusMaster
'''
#include <ModbusMaster.h>
// instantiate ModbusMaster object
ModbusMaster node;
void setup()
{
// use Serial (port 0); initialize Modbus communication baud rate
Serial.begin(9600);
// communicate with Modbus slave ID 1 over Serial (port 0)
node.begin(1, Serial);
}
void loop()
{
static uint32_t i;
uint8_t j, result;
uint16_t data[6];
i++;
// set word 0 of TX buffer to least-significant word of counter (bits 15..0)
// node.setTransmitBuffer(0, lowWord(i));
// set word 1 of TX buffer to most-significant word of counter (bits 31..16)
// node.setTransmitBuffer(1, highWord(i));
// slave: write TX buffer to (2) 16-bit registers starting at register 0
// result = node.writeMultipleRegisters(0, 2);
// slave: read (6) 16-bit registers starting at register 2 to RX buffer
result = node.readHoldingRegisters(2, 6);
// do something with data if read is successful
if (result == node.ku8MBSuccess)
{
Serial.println(result);
}
}
'''
但它不起作用,似乎arduino之间没有通信。有没有人有办法解决吗?
解决方案
推荐阅读
- python - TensorFlow 2.0.0 ValueError:没有为任何变量提供渐变:['Variable:0']
- python - Python 日志记录终止
- r - 基准实验中使用的学习器的特征重要性 - mlr
- c# - 如何添加自定义 EntityState 枚举
- sql-server - 使用 npm express 连接到本地 mssql 服务器进行反应
- python - 如何从多列中获取最大值
- azure - 从 Azure 流分析中的 EventHub 中删除重复项
- javascript - 如何写入文本文件Javascript?
- python - Tkinter 格式化 DoubleVar 以进行显示
- sapui5 - 在 Web IDE 中更改 SAPUI5 项目的命名空间