Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2年前关闭。
                                                                                            
                
        
我有SCADA系统和两个arduino奴隶。 scada系统基于Modbus协议运行。数据必须通过Modbus协议从SLAVES发送到SCADA系统。让我知道如何在Arduino平台上实现modbus协议。这里的交流方式。请共享arduino UNO的Modbus协议的接线图。

#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

最佳答案

您需要为arduino编写或找到MODBUS通信堆栈(库)。该说明如何使用它,应该是该库的一部分。

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

关于modbus的更多信息:
https://en.wikipedia.org/wiki/Modbus
有关RS-485的更多信息:
https://en.wikipedia.org/wiki/RS-485

10-08 07:38