参考《Arduino与S7-200 PLC 进行Modbus通信测试 》学习ArduinoModbus通信,编译出现错误提示。
?%ra=link https://www.cnblogs.com/GeGeBoom/p/14636133.html
//源程序:
#include
#include
#include
#include
#include
volatile int item;
SimpleTimer timer;
modbusDevice regBank;
modbusSlave slave; //modbus从站
#define RS485TxEnablePin 2 //RS485使能引脚
#define RS485Baud 9600 //波特率9600
#define RS485Format SERIAL_8E1 //8位 偶校验
#define LED1 13
#define LED2 12
void setup()
{
//初始化串口
slave.setBaud(&Serial, RS485Baud, RS485Format, RS485TxEnablePin);
//分配Modbus设备ID。
regBank.setId(1);
/*。
Modbus寄存器遵循以下格式。
00001-09999数字输出,主设备可以读写这些寄存器。
10001-19999数字输入,主设备只能从这些寄存器读取值。
30001-39999模拟输入,主设备只能从这些寄存器读取值。
40001-49999模拟输出,主设备可以读取和写入这些寄存器。
模拟值是存储范围为0-32767的16位无符号字。
数字值以字节存储,零值为OFF,任何非零值为ON。
*/
//将模拟输入寄存器添加到寄存器组
regBank.add(30001);
regBank.add(30002);
//将模拟输出寄存器添加到寄存器组
regBank.add(40001);
regBank.add(40002);
slave._device = ®Bank;
//设置引脚模式
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
//设置定时器 每秒执行一次
timer.setInterval(1000L, Simple_timer_1);**//提示这里有问题**
}
void loop()
{
//读取40001寄存的值
digitalWrite(LED1, regBank.get(40001));
digitalWrite(LED2, regBank.get(40002));
//向30001寄存器写入数据
regBank.set(30001, (word) (99 - item)); //from 99 - 0
regBank.set(30002, (word) item); //from 0 - 99
//Modbus从站程序运行
slave.run();
//简单定时器运行
timer.run();
}
//定时器执行函数
void Simple_timer_1() {
item = item + 1;
if (item == 99) {
item = 0;
}
}
运行结果及报错内容 :
SimpleTimerexit status 1no matching function for call to 'SimpleTimer__setInterval(long int, void (&)())'