Giỏ hàng
Danh mục sản phẩm

Lập trình kết nối Modbus RTU Arduino Biến tần INVT

Đăng bởi Trần Văn Bùi ngày bình luận

Hôm nay bên Mình giới Thiệu các bạn bài viết lập trình kết nối modbus RTU Cho Biến tần INVT 
Đầu tiên các bạn cài đặt thống số sau 
P000.
P000.01:2 Cài đặt chế độ Modbus  RTU
P000.06:6 lựa chọn tần số  Modbus RTU

P14 Group Serial communication ( thông số truyền thông )

P14.00 local communication address ( địa chỉ )

Settings 1 to 247
Default: 1 ( Mặc định )
-> Chọn địa chỉ thiết bị

ID=1

P14.01 Communication baud ratio  ( tốc độ truyền )

0: 1200 BPS
1: 2400 BPS
2: 4800 BPS
3: 9600 BPS
4: 19200 BPS
5: 38400 BPS
6: 57600 BPS
Default: 4 Baud rate 19200 ( Mặc định )

ở đây Mình cài Baud =3-9600

P14.02 Digital bit checkout

0: No check (N,8,1)for RTU
1: Even check (E,8,1)for RTU
2: Odd check (O,8,1)for RTU
3:No check (N,8,2)for RTU
4: Even check (E,8,2)for RTU
5: Odd check(O,8,2)for RTU
6: No check(N,7,1)for ASCII
7: Even check(E,7,1)for ASCII
8: Odd check(O,7,1)for ASCII
9: No check(N,7,2)for ASCII
10: Even check(E,7,2)for ASCII
11: Odd check(O,7,2)for ASCII
12: No check(N,8,1)for ASCII
13: Even check(E,8,1)for ASCII
14: Odd check(O,8,1)for ASCII
15: No check(N,8,2)for ASCII
16: Even check(E,8,2)for ASCII
17: Odd check(O,8,2)for ASCII

=1 (E,8,1)
Default: 1 Modbus RTU mode, protocol <E, 8, 1> ( Mặc định )
-> chọn giao thức truyền thông modbus

P14.03 Communication answer delay

0~200ms
Default: 5 ( Mặc định )

P14.04 Communication overtime fault time

0.0(invalid),0.1~60.0s
Default: 0.0 ( Mặc định )

P14.05 Transmission fault processing

0:Alarm and stop freely
1:No alarm and continue to run
2:No alarm and stop according to the stop means(only
under the communication control)
3:No alarm and stop according to the stop means(under all
control modes)
Default: 0 ( Mặc định )

Sau Phần Cài đặt 

Các bạn dùng Bộ chuyển đổi USB TO RS485 Với biến tần để đảm bảo thông số đã hoạt động .

 

Các bạn dùng Modbus poll để kiểm tra biến tần đã kết nối và cài đặt chính xác kết quả trả về như trên

Hàm 2000H Đổi ra DEC =8192

=1 Quay thuận 

=2 quay ngược 

=5 dừng motor

Hàm 2001H Đổi ra DEC =8193 (Hàm ghi tần số Modbus đơn vị 0.01Hz)

Bây giờ các bạn kết nối khối RS485 

Với các mạch Trên Thị trường các bạn kết nối đến TX2,RX2 Nhé

Mạch bên mình đã sẵn bộ chuyển đổi RS485 Cách ly UART2 

Chân A kết nối  458+,Chân B kết nối 485-

Chương trình như sau 

include <ModbusMaster.h>

/*!
  We're using a MAX485-compatible RS485 Transceiver.
  Rx/Tx is hooked up to the hardware serial port at 'Serial'.
  The Data Enable and Receiver Enable pins are hooked up as follows:
*/


// instantiate ModbusMaster object
long int cnt_mb=0;
ModbusMaster node;
//ModbusMaster node1;
#define CW A13
#define CCW A12
#define STOP A11 
#define LED_CW 34
#define LED_CCW 33 
#define LED_STOP 32 
#define LED_PWM 45
void setup()
{
 node.begin(1, Serial2);//SALVE 1 
   pinMode(CW, INPUT);
     pinMode(CCW, INPUT);
       pinMode(STOP, INPUT);
        pinMode(LED_CW, OUTPUT);
         pinMode(LED_CCW, OUTPUT);
          pinMode(LED_STOP, OUTPUT);
          pinMode(LED_PWM, OUTPUT);
Serial.begin(9600);
  // Modbus communication runs at 115200 baud
  Serial2.begin(9600,SERIAL_8E1);

  // Modbus slave ID 1
  
  //node1.begin(2, Serial1);
  // Callbacks allow us to configure the RS485 transceiver correctly
  
}

bool state = true;
  int sensorValue=0;
int  i=0;//CHIỀU QUAY 2 10 ,1 01 0 00
int  i1=0;//TẦN SỐ
void loop()
{
  
  uint8_t j, result;
  uint16_t data[6];
   
   if(digitalRead(CW)==0){  i=1; Serial.println(i);digitalWrite(LED_CW, HIGH);digitalWrite(LED_CCW,LOW);digitalWrite(LED_STOP ,LOW); node.writeSingleRegister(8192, i);  }//Chiều quay thuận tần biến tần
    if(digitalRead(CCW)==0 ) {i=2;Serial.println(i);digitalWrite(LED_CW, LOW);digitalWrite(LED_CCW,HIGH);digitalWrite(LED_STOP ,LOW); node.writeSingleRegister(8192, i);}//Chiều quay Ngược tần biến tần
      if(digitalRead(STOP)==0){ i=5;Serial.println(i);digitalWrite(LED_CW, LOW);digitalWrite(LED_CCW,LOW);digitalWrite(LED_STOP ,HIGH); node.writeSingleRegister(8192, i);}//Dừng Motor 
   // set word 0 of TX buffer to least-significant word of counter (bits 15..0)
   
     sensorValue = analogRead(A0);
    analogWrite(LED_PWM, sensorValue/4);
    cnt_mb++;
    switch(cnt_mb)
    {
       case 1:  node.writeSingleRegister(8193,sensorValue*4);break; //Ghi 2001
        case 100:break;
          case 200:break;
           case 300:node.writeSingleRegister(8192, i);break;////Ghi 2000
             case 400:cnt_mb=0;break;
      
      }

 //  Serial.println(sensorValue);
  // set word 1 of TX buffer to most-significant word of counter (bits 31..16)
//SEND 8450 
 //  node.setTransmitBuffer(2,i1);


  // slave: write TX buffer to (2) 16-bit registers starting at register 0
 //  result = node.writeMultipleRegisters(8192, 2);//SEND 8449 LEN 2
 //   result = node.writeMultipleRegisters(10, 20);
   // result = node.writeMultipleRegisters(20, 30);
  // slave: read (6) 16-bit registers starting at register 2 to RX buffer
//  result = node.readHoldingRegisters(2, 6);

  // do something with data if read is successful

}

Cảm ơn các bạn đã ghép thăm shop .

 


Mới hơn