Lập trình arduino HMI
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
ASCII: Frame Data
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);
}
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:
Response
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…
Các bạn dùng phần mền HMI delta DOP ,
vẽ đơn giản ,
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