MODBUS là một protocol phổ biến bậc nhất được sử dụng hiện nay cho nhiều mục đích. MODBUS do Modicon (hiện nay thuộc Schneider Electric) phát triển năm 1979, là một phương tiện truyền thông với nhiều thiết bị thông qua một cặp dây xoắn đơn. Ban đầu, nó hoạt động trên RS232, nhưng sau đó nó sử dụng cho cả RS485 để đạt tốc độ cao hơn, khoảng cách dài hơn, và mạng đa điểm (multi-drop). MODBUS đã nhanh chóng trở thành tiêu chuẩn thông dụng trong ngành tự động hóa, và Modicon đã cho ra mắt công chúng như một protocol miễn phí.

Ngày nay, MODBUS-IDA (www.MODBUS.org) , tổ chức sử dụng và cung cấp MODBUS lớn nhất tiếp tục hỗ trợ protocol MODBUS trên toàn cầu.

PROTOCOL hay giao thức truyền thông là những quy định trong việc truyền thông tin giữa các thiết bị trong hệ thống công nghiệp

MODBUS than chiếu theo hệ OSI nó nằm ở lớp thứ 7 lớp ứng dụng và tùy theo loại modbus thì ở các lớp dưới nó dùng những phương thức khác nhau

Bài này Tôi xin viết chủ yếu về ModBus RTU  và  ASCII căn bản nó là giống nhau ở khung Frame data . Nhưng khác nhau ở các bit truyền trên đường truyền

RTU:   frame Data

MODBUS

ASCII: Frame Data

MODBUS1

CRC Check

#include <crc_modbus.h>
void crc(unsigned char *pBuffer, unsigned char usBufferSize)
{
unsigned int usResult = 0xFFFF;
unsigned char j;
unsigned char i;

for(j = 0; j < usBufferSize; j++)
{
usResult = usResult ^ pBuffer[j];
for(i = 0; i < 8; i++)
{
if(usResult & 0x01)
{
usResult >>= 1;
usResult = usResult ^ 0xA001;
}
else usResult >>= 1;
}
}
CRCLo = (char) usResult;
CRCHi = (char)(usResult>>8);
}

1.01 READ COIL STATUS

Ví dụ đọc thiết bị 10-22 (11-23)

Example of a request to read 10…22 (Coil 11 to 23) from slave device address 4:

mb1

Response

mb2

Các bạn tham khảo link hướng dẫn http://www.modbustools.com/modbus.html

Để mô  phỏng các bạn có thể online trên phần mền HMI delta hoặc hmi weintek

Phần cứng các bạn chuẩn bị bao gồm ARDUINO,chíp MCU bất kỳ có truyền thông UART

Mình mới bắt đầu chạy thử trên Arduino

1 board PL2303,CH340…

PL2303

Các bạn dùng phần mền HMI delta DOP ,

vẽ đơn giản ,

MODBUS HMI

Sau đó để mophong bạn chon online để chạy mô phỏng

Về chương trình đọc nút bấm

Như mình đang làm thì MCU master ,HMI salve

code basic cho đọc button

void write_data_slave_F1(uint8_t id,uint8_t fuction,uint16_t value_add,uint16_t value_cnt,uint8_t _len,uint16_t time)
{
_msg[0]=id&0xFF;//id
_msg[1]=fuction&0xFF;//idfuction
_msg[2]= value_add>>8;
_msg[3]= value_add&0xFF;
_msg[4]= value_cnt>>8;
_msg[5]= value_cnt&0xFF;
crc(_msg,_len-2);
_msg[6]=CRCLo ;
_msg[7]=CRCHi ;
for(i=0;i<_len;i++)
{
putchar1(_msg[i]);
}
// HAL_UART_Transmit(&huart1, _msg,_len, 10);
// HAL_UART_Transmit_IT(&huart1,_msg,_len);
// HAL_Delay(time);
// free(_msg);
// free(uart1.buffer);
}

Mọi người muốn lây code mẫu gửi maill gọi cho mình để hỗ trợ :0977948846

 

 

Bình luận

Bình luận