Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用于Arduino的MODBUS协议_C_Arduino_Protocols_Network Protocols_Modbus - Fatal编程技术网

C 用于Arduino的MODBUS协议

C 用于Arduino的MODBUS协议,c,arduino,protocols,network-protocols,modbus,C,Arduino,Protocols,Network Protocols,Modbus,我有SCADA系统和两个arduino奴隶。scada系统采用Modbus协议。数据必须通过modbus协议从从属设备发送至SCADA系统。让我知道如何在Arduino平台上实现modbus协议。这里的交流是如何发生的。请分享arduino UNO的modbus协议接线图 #include "Wire.h" #define DS1307_ADDRESS 0x68 byte zero = 0x00; //workaround for issue #527 void setup(){ Wire

我有SCADA系统和两个arduino奴隶。scada系统采用Modbus协议。数据必须通过modbus协议从从属设备发送至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的例子

链接

不确定你到底在找什么。您可以访问SourceForge并找到任意数量的Arduino兼容库

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


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

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

有关modbus的更多信息: 有关RS-485的更多信息: 您可以在arduino上使用Mudbus