Modbus為RS232一種通訊格式,在工作上因為有用MAC OSX 控制機台PLC動作的需求,因此這邊搭配LibModBus來控制PLC的動作,LibModBus支援系統有Linux, Mac OS X, FreeBSD, QNX and Win32。
LibModBus連結 |
1.首先需找到 Mac serial port 的名稱,開啟Mac的Terminal分別下以下指令cd /dev , ls 來找到 Mac serial port 的名稱。
我這邊的電腦的serial port名稱是 tty.usbserial-FTKVM5XY
備註:是 tty.usbserial 不是 cu.usbserial
2.安裝libmodbus套件,首先去libmodbus 官網下載檔案,版本有兩個 則一即可。
將下載的檔案解壓縮,然後到解壓縮玩的目錄下,進入root 模式 sudo su
執行./configure
執行make all ,如果當前有安裝須先清除,make clean all
執行 make install 即可產出 lib file
所產出的兩個 lib file
3.程式碼控制(以下提供簡易程式範例供參考)
#include "modbus.h" //需 include modbus.h 檔 ctx = modbus_new_rtu("/dev/cu.usbserial-FTKVM5XY",19200,'E',8,1); /* 首先連接USB使用modbus_new_rtu("usb port位置",E,鮑率,8bit,1停止位元) */ modbus_set_debug(ctx, 1); /* 設定debug偵測錯誤 */ modbus_connect(ctx); /* 連接modbus */ modbus_set_slave(ctx,2); /* 輸入設備ID = 2 (每種設備的ID皆不同) */ //判斷是否有正常連線 if (modbus_connect(ctx) == -1) { printf("modbus link error"); modbus_free(ctx); /* 釋放 */ } [NSThreadsleepForTimeInterval:0.1]; /* 設定延時0.1sec ps這邊使用的是objective c 的寫法 ; c 使用delay time */ /* 未設定延時會有timeout產生 */ modbus_write_register(ctx,0x0259,0x0003); /* 寫入資料PLC的位置 modbus_write_register(usb port,PLC位置,數值) */ /* 結束流程 */ modbus_close(ctx); modbus_free(ctx);
延伸閱讀: