MODBUS Protocol for Arduino

MODBUS Protocol for Arduino

问题描述:

我有SCADA系统和两个arduino奴隶。 scada系统适用于Modbus协议。数据必须通过modbus协议从SLAVES发送到SCADA系统。让我知道如何在Arduino平台上实现modbus协议。在这里如何沟通。请分享arduino UNO modbus协议的接线图。MODBUS Protocol for Arduino

#include "Wire.h" 
#define DS1307_ADDRESS 0x68 
byte zero = 0x00; //workaround for issue #527 

void setup(){ 
    Wire.begin(); 
    Serial.begin(9600); 
    setDateTime(); //MUST CONFIGURE IN FUNCTION 
} 

void loop(){ 
    printDate(); 
    delay(1000); 
} 

void setDateTime(){ 

    byte second = 45; //0-59 
    byte minute =01; //0-59 
    byte hour = 13; //0-23 
    byte weekDay =2; //1-7 
    byte monthDay =24; //1-31 
    byte month = 2; //1-12 
    byte year =  14; //0-99 

    Wire.beginTransmission(DS1307_ADDRESS); 
    Wire.write(zero); //stop Oscillator 

    Wire.write(decToBcd(second)); 
    Wire.write(decToBcd(minute)); 
    Wire.write(decToBcd(hour)); 
    Wire.write(decToBcd(weekDay)); 
    Wire.write(decToBcd(monthDay)); 
    Wire.write(decToBcd(month)); 
    Wire.write(decToBcd(year)); 

    Wire.write(zero); //start 

    Wire.endTransmission(); 

} 

byte decToBcd(byte val){ 
// Convert normal decimal numbers to binary coded decimal 
    return ((val/10*16) + (val%10)); 
} 

byte bcdToDec(byte val) { 
// Convert binary coded decimal to normal decimal numbers 
    return ((val/16*10) + (val%16)); 
} 

void printDate(){ 

    // Reset the register pointer 
    Wire.beginTransmission(DS1307_ADDRESS); 
    Wire.write(zero); 
    Wire.endTransmission(); 

    Wire.requestFrom(DS1307_ADDRESS, 7); 

    int second = bcdToDec(Wire.read()); 
    int minute = bcdToDec(Wire.read()); 
    int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time 
    int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday 
    int monthDay = bcdToDec(Wire.read()); 
    int month = bcdToDec(Wire.read()); 
    int year = bcdToDec(Wire.read()); 

/* int second = 11; 
    int minute =18; 
    int hour = 18; 
    int weekDay = 1; 
    int monthDay = 2; 
    int month = 11; 
    int year = 12; 
*/ 
    //print the date EG 3/1/11 23:59:59 
    Serial.print(monthDay); 
    Serial.print("/"); 


    Serial.print(month); 
    Serial.print("/"); 

    Serial.print(year); 
    Serial.print(" "); 
    Serial.print(hour); 
    Serial.print(":"); 
    Serial.print(minute); 
    Serial.print(":"); 
    Serial.println(second); 

// Serial.print("Week Day Of week"); 
// Serial.println(weekDay); 


} 

数据通过MODBUS协议来发送:

Serial.print(year); 
Serial.print(month); 
Serial.print(monthDay); 
Serial.print(hour); 
Serial.print(minute); 
Serial.println(second); 

我期待例如与Arduino的

链接 Modbus protocol Arduino link

不知道你寻找什么对于。你可以进入SourceForge并找到任意数量的Arduino兼容库。

如果您正在寻找更像完整草图的东西,这是一个完整的草图。它是j2mod的一部分,它是一个Java Modbus实现。

https://sourceforge.net/p/j2mod/code/HEAD/tree/trunk/src/sketches/OSS_DAQ/OSS_DAQ.ino

你需要编写或找到Arduino的MODBUS通信协议栈(库)。如何使用它的说明应该是该库的一部分。

注意:Modbus是可以使用不同“物理层”的通信协议。 RS-485,其中一些可能不被Arduino支持。

更多MODBUS: https://en.wikipedia.org/wiki/Modbus 更多的RS-485: https://en.wikipedia.org/wiki/RS-485

您可以在Arduino的使用MUDBUS https://code.google.com/p/mudbus/