通讯编程002——使用Arduino ModbusTCP 控制照明

本文介绍如何使用Arduino作为Modbus TCP从站,PC机为Modbus主站,安装ModScan用于主站调试,通过ModScan控制LED开关照明。相关软件可登录网信智汇(wangxinzhihui)下载。

1、运行Arduino IDE,点击“工具/管理库”,弹出库管理器,搜索modbus,加载ArduinoModbus库。

2、创建项目,输入以下代码:

//引入相关库文件
#include <SPI.h>
#include <Ethernet.h>
#include <ArduinoRS485.h>
#include <ArduinoModbus.h>

//设置网络
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //设置Arduino网络MAC地址
IPAddress ip(192, 168, 1, 100);                 //设置Arduino网络IP地址
EthernetServer  ethServer(502);                //创建服务器对象,端口502
ModbusTCPServer  modbusTCPServer;               //创建ModbusTCPServer 对象


//采用PIN8输出,控制LED
const int ledPin = 8;

//主程序
void setup() {
  //启动串口用于打印输出调试:
  Serial.begin(9600);

  //创建服务器连接
  Ethernet.begin(mac, ip);

   //检测网络硬件
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("网卡设备未发现");
    while (true) {
      delay(1);
    }
  }


 //离线检测
 if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("网卡未连接");
  }


  //启动服务器
  ethServer.begin();

  //启动Modbus TCP server
  if (!modbusTCPServer.begin()) {
    Serial.println("启动Modbus TCP Server失败!");
    while (1);
  }

  // 配置LED
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  //Modbus TCP Server配置1个线圈,地址0x00
  modbusTCPServer.configureCoils(0x00, 1);
}

//主循环
void loop() {
  //侦听网络连接
  EthernetClient client = ethServer.available();

  if (client) {
    // 发现一个新的连接
    Serial.println("发现一个新的连接");

     //接受连接
    modbusTCPServer.accept(client);

    while (client.connected()) {
      // 接受modbus TCP主站轮询
      modbusTCPServer.poll();

      // 更新LED状态
      updateLED();
    }

   Serial.println("连接断开");
  }
}

// 更新LED状态
void updateLED() {
  // 读取线圈状态
  int coilValue = modbusTCPServer.coilRead(0x00);

  if (coilValue) {
    //线圈值为1,LED灯亮
    digitalWrite(ledPin, HIGH);
  } else {
    //线圈值为0,LED灯灭
    digitalWrite(ledPin, LOW);
  }
} 

3、编译,下载

4、在上位机上用Modscan,改变线圈00的数值,观察LED照明变化。

通过本案例,可以初步掌握Arduino Modbus TCP从站开发的基本知识,通过扩展,可开发出更丰富的功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值