FreeModbus TCP传输初始化
生活随笔
收集整理的這篇文章主要介紹了
FreeModbus TCP传输初始化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先看一下初始化函數,參數只有端口。
/* modbus協議棧初始化 */ eMBErrorCode eMBTCPInit(USHORT ucTCPPort);在網絡通信過程中,502端口是專門為modbus保留的,其它應用不得占用該端口。在缺省配置的情況下,強制使用502端口。
?
modbus協議棧的初始化,主要工作為tcp初始化,注冊一些接口,設置節點號。
特別要注意節點號問題,由于網絡中通過IP地址尋址,因此節點號對于本機來說就沒什么用了,本機必須使用0xFF。
?
但是對于專門用于通過以太網TCP-IP網絡和MODBUS串行鏈路之間的網關對MODBUS或MODBUS+串行鏈路從站的通信來說。網關轉發數據包給串行鏈路時,節點號被用來尋址從節點。
?
modbus tcp端口初始化,主要就是創建modbus tcp服務器,監聽端口,等待客戶端連接。
/* modbus tcp端口初始化 */ BOOL xMBTCPPortInit(USHORT usTCPPort) {struct tcp_pcb *pxPCBListenNew, *pxPCBListenOld;BOOL bOkay = FALSE;USHORT usPort;/* 默認端口502 */if(usTCPPort == 0){usPort = MB_TCP_DEFAULT_PORT;}else{usPort = (USHORT)usTCPPort;}/* 創建tcp控制塊 */if((pxPCBListenNew = pxPCBListenOld = tcp_new()) == NULL){bOkay = FALSE;}/* 綁定端口 */else if(tcp_bind(pxPCBListenNew, IP_ADDR_ANY, (u16_t)usPort) != ERR_OK){(void)tcp_close(pxPCBListenOld);bOkay = FALSE;}/* 監聽端口 */else if((pxPCBListenNew = tcp_listen(pxPCBListenNew)) == NULL){(void)tcp_close(pxPCBListenOld);bOkay = FALSE;}/* 注冊連接回調函數 */else{tcp_accept(pxPCBListenNew, prvxMBTCPPortAccept);pxPCBListen = pxPCBListenNew;#ifdef MB_TCP_DEBUGvMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" ); #endif}bOkay = TRUE;return bOkay; }modbus tcp服務器同時只能接受一個客戶端的連接。
/* 客戶端連接回調函數 */ err_t prvxMBTCPPortAccept(void *pvArg, struct tcp_pcb *pxPCB, err_t xErr) {err_t error;if(xErr != ERR_OK){return xErr;}/* 之前沒有客戶端連接 */if(pxPCBClient == NULL){pxPCBClient = pxPCB;/* 注冊接收回調函數 */tcp_recv(pxPCB, prvxMBTCPPortReceive);/* 注冊錯誤回調函數 */tcp_err(pxPCB, prvvMBTCPPortError);/* 回調函數參數 */tcp_arg(pxPCB, pxPCB);/* 接收字節數置0 */usTCPBufPos = 0;#ifdef MB_TCP_DEBUGvMBPortLog(MB_LOG_DEBUG, "MBTCP-ACCEPT", "Accepted new client %d.%d.%d.%d\r\n",ip4_addr1(&(pxPCB->remote_ip)), ip4_addr2(&(pxPCB->remote_ip)),ip4_addr3(&(pxPCB->remote_ip)), ip4_addr4(&(pxPCB->remote_ip))); #endiferror = ERR_OK;}/* 已經有客戶端連接,不允許第二個客戶端連接 */else{prvvMBPortReleaseClient(pxPCB);error = ERR_OK;}return error; }?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的FreeModbus TCP传输初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 张泉灵:时代抛弃你时,连一声再见都不会说
- 下一篇: 果断收藏!156页PPT全景展现全球区块