Linux 驅動 RS485測試程式編寫

2021-10-19 14:26:23 字數 1805 閱讀 8800

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,那麼別人就悶了。所謂的通...