庫(kù)文件?
在step7-mirco/win smart編程軟件的指令中,可以找MODBUS RTU的通信庫(kù)文件:
這里Smart作為主站。
我們?nèi)绻捎玫氖荂PU本地的串口,那么我們選擇庫(kù)文件為Modbus RTU Master;若是擴(kuò)展通訊板,則選擇Modbus RTU Master2。
【2】庫(kù)文件的調(diào)用
初始化主站:
初始化主站指令是:MBUS_CTRL
“模式”(Mode) 輸入的值用于選擇通信協(xié)議。輸入值為 1 時(shí),將 CPU 端口分配給 Modbus 協(xié)議并啟用該協(xié)議。輸入值為 0 時(shí),將 CPU 端口分配給 PPI 系統(tǒng)協(xié)議并禁用 Modbus 協(xié)議。
參數(shù)“奇偶校驗(yàn)”(Parity) 應(yīng)設(shè)置為與 Modbus 從站設(shè)備的奇偶校驗(yàn)相匹配。所有設(shè)置使用一個(gè)起始位和一個(gè)停止位。允許的值如下:0(無(wú)奇偶校驗(yàn))、1(奇校驗(yàn))和 2(偶校驗(yàn))。
參數(shù)“端口”(Port)設(shè)置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可選 CM01 信號(hào)板上的 RS-485 或 RS-232)。
參數(shù)“超時(shí)”(Timeout) 設(shè)為等待從站做出響應(yīng)的毫秒數(shù)。“
當(dāng) MBUS_CTRL指令完成時(shí),指令將“真”(TRUE) 返回給“完成”(Done) 輸出。“錯(cuò)誤”(Error) 輸出包含指令執(zhí)行的結(jié)果。
Mode=1將 CPU 端口分配給 Modbus 協(xié)議并啟用該協(xié)議;
Baud為波特率;Parity=0無(wú)奇偶校驗(yàn);port=0代表使用本體通信口。
Timeout=1000ms。
設(shè)計(jì)循環(huán)計(jì)數(shù)器
因?yàn)槭前腚p工,采用的是輪詢方式。為此我們?cè)O(shè)計(jì)一個(gè)循環(huán)計(jì)數(shù)器。
數(shù)據(jù)讀
當(dāng)計(jì)數(shù)器==1時(shí),此數(shù)據(jù)塊執(zhí)行。
Slave=11代表從站設(shè)備的通訊ID為11;RW=0代表只讀;Addr=432769代表從站設(shè)備的modbus寄存器地址;count=1代表一個(gè)字。DataPtr(間接地址指針)=&VB3200代表從VB3200開(kāi)始。一個(gè)字就是VW3200。
數(shù)據(jù)寫
與數(shù)據(jù)讀不通的是,RW=1。
當(dāng)48193=1時(shí),變頻器啟動(dòng);當(dāng)48193=5時(shí),變頻器停止。
對(duì)應(yīng)S7-200smart的地址是VW104。(count=1為一個(gè)字)
【3】通訊的總結(jié)
① 輪詢通訊有時(shí)間差,比如讀頻率反饋的時(shí)候,會(huì)發(fā)現(xiàn)頻率反饋是非連續(xù)性的。
②可以用Done還驅(qū)動(dòng)下一個(gè)數(shù)據(jù)輪詢。但是若上一條沒(méi)有執(zhí)行,那么后面的不會(huì)執(zhí)行?具體可以參考庫(kù)文件的幫助。
③讀取過(guò)來(lái)的數(shù)據(jù)有可能要進(jìn)行地址偏移或者數(shù)據(jù)的轉(zhuǎn)換,比如高低字的轉(zhuǎn)換,整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)等。
④首先利用ModScan32.exe或者M(jìn)odbus Poll可以很好的監(jiān)測(cè)數(shù)據(jù)地址及數(shù)據(jù)格式。