rs485工業應用非常廣泛,半雙工通訊,一般在電表,或者工業modbusrtu協議上面應用比較多;
下面重點說一下在linux平台上,應用程式該如何斷幀,以及測試程式的編寫;rs485應用底層最核心的部分就是斷幀,連續接收資料,位元組之間的間隔時間是很短的,如果超出波特率的設定時間,認為報文分幀了。
1、開啟裝置
···c
s32 main(int argc, char **ar**)
;char rxbuf[256] = ;
int txlen = 0;
int rxlen = 0;
u8 count = 0;
s32 ret = 0;
u16 airmode = 0;
int rs485fd = 0;
int value =0;
t_serinetcfg rs485cfg;
t_serialclass *serial=null;
if (argc != 3)
if ( (memcmp("ttys3",ar**[1],sizeof(ar**[1])+1) == 0) || (memcmp("ttys4",ar**[1],sizeof(ar**[1])+1) == 0))
else
value = 0;
ioctl(rs485fd,io_rs485_off,&value);
}
sprintf(rs485cfg.ttyname,ar**[1]);
rs485cfg.baudrate = atoi(ar**[2]);
rs485cfg.databits = 8;
rs485cfg.check = 0;
rs485cfg.stopbits = 1;
serial = newserialclass(&rs485cfg,50);
if(null == serial)
maxfd=serial->fd;
sleep(1);
//sprintf(txbuf,"hello world!\0");
//txlen = 12;
printf("serial test!\n");
for(; ;)
printf("recv:%s\n",rxbuf);
}usleep(100*1000);
}
close(rs485fd);
return 0;
2、讀取函式加斷幀操作
```c
#define readframe_time 1000 //讀取一幀資料超時時間
ul32 getclick()
ul32 gettick()
u16 readframe(int fd, s8 *buf, u16 len, ul32 dwtimeouts)
if (frecvd && icnt<=0)
rval += icnt;
}usleep(winterv * 1000); //ms
ival1 = gettick()-dwtick;
}while(abs(ival1) < dwtimeouts);
return rval;
}
3、傳送函式,把接收到的資料原封不動的傳送出去;
s32 writeframe
(int fd, s8 *buf,
int txlen)
written += n;
}return written;
}
常用介面 RS485
rs485電路設計 差分傳輸 半雙工 rs 485是針對uart串列埠的一種介面標準,它定義了序列通訊系統中傳送器和接收器的一系列電氣特性。相比於rs 232,rs 485標準的通訊系統抗干擾能力較強,可實現長距離資料傳輸 同時支援多個收發器連線到同乙個通訊網路中。因此,rs 485在工業控制領域以...
rs485除錯軟體 RS485 三種硬體電路設計
rs485介面具有抗干擾性強,適合長距離傳輸和多站點通訊等特點,因此在工業控制中被普遍使用。微控制器只有uart介面,如果需要使用rs485通訊,需要外面加乙個transceiver。由於rs485工作在半雙工模式,因此傳送和接收的方向切換是設計過程中的乙個重要問題。通常的介面電路有以下三種 1 第...
rs485除錯助手 RS485通訊連線方式是怎樣的
電工之家 www.dgzj.com qq群 2179090 rs485是串列埠的一種,常見的還有rs232,rs422,都屬於串列埠,它們都只是定義了電氣特性的通訊結構,並沒有定義資料傳輸的協議。有的人很容易混淆它們之間的概念,比如人家問你是什麼通訊協議,你回答是rs485,那麼別人就悶了。所謂的通...