之前看到有人提出一個問題:
現有一套完整設備,觸摸屏+6只傳感器,屏和傳感器用RS485總線通信,采用ModbusRtu協議,但沒有屏的程序。這種情況,在不改變屏和傳感器的條件下,實現用一個PLC也能采集到6只傳感器的數據。剛好有點空,以此為引,測試一個簡單的邏輯。
一,實現構想
S7-200 Smart本體具有一個RS485接口,ModbusRTU的指令庫,也可以通過自由口協議進行編程。PLC的串口能發送和接收指令,如果把PLC串口接到總線上,打開端口,不發送數據,接收線路上的消息,對信息進行甄別,如果接收到來自傳感器的信息,通過消息數據串的協議格式,將有效數據提取出來。
二,硬件和軟件的搭建
首先,硬件上是支持的。通過雙絞線把PLC的RS485接口接到已經存在總線上就可以了,主要的工作在于軟件怎么實現。
思路,Modbus-RTU消息幀起始和結束,是通過空閑線時間來分辨的,3.5個字符的空閑時間。假設通信格式為:起始位1,數據位8,校驗位1,停止位1,傳輸一個字符需11位,3.5個字符,總的位數等于3.5*11=38.5,在9.6k的波特率下,空閑時間約38.5/9600=4.0104167毫秒。剛好S7-200Smart有兩個定時器指令BITIM和CITIM,可以用來做毫秒級的時間間隔處理。自由口打開,接收字符,采用中斷8,即每接收一個字符就中斷一次。
PLC上電運行時,進行一次BITIM,打開接收端口,
1,接收到第一個字符
2,中斷
A,執行CITIM計算時間間隔,并重新執行BITIM記錄時間,并如果大于4秒(空閑線檢測),進入B,如果小于4毫秒,表示正在接收消息,若接收標志位1,進入C,若接收標志為0,表示信息錯誤,進入I;
B,時間間隔大于4秒,上一步中接收的字符是第一個字符,接收標志位置1;
C,把SMB2(接收到的字符)存放到緩沖區第一個字符,緩沖區數據個數自增1;
D,如果數據個數=預設的數據長度,認為消息已經接收完成,判定接收完成,進入E,如果小于,表示信息沒有接收完,進入I;
E,比較通信指令,一般Modbus-RTU讀寄存器指令為03H,如果接收到的第二個字符是03h,下一步進行CRC校驗計算,核對校驗字符;
F,CRC校驗計算,核對校驗字符;
G,核對成功,提取數據。否則進入H;
H,復位接收標志位;
I,中斷返回。
3,回到第1步,繼續接收字符。
三,編程測試
測試條件根據現有條件布置,手上剛好有兩臺S7-200Smart,一臺作為Modbus-RTU服務器,使用Modbus從站指令庫。通信格式1位起始位,8位數據位,偶校驗,停止位默認1位,波特率9600,設備地址3;電腦作為客戶端,讀取服務器(從站)的數據,測試時,只讀了一個字的數據。
1,用串口測試工具commix測試。OK
2,用Modbus scan測試。OK
程序:主程序
中斷程序
子程序 CRC校驗
簡單測試,僅供探討,如有錯漏,請不吝指點!
- WinCC中VB腳本和C腳本到底怎么選? 2024-11-22
- 西門子S120常見授權如何生成密鑰及找回密鑰等問題介紹 2024-11-22
- 西門子直流裝置6RA70偶發F005故障的原因 2024-11-22
- 西門子博途V19里的密碼設置 2024-11-22
- 4個指令帶你了解西門子S7-1200 PLC的配方功能 2024-11-22
- 西門子S7-1200組態控制的優勢和應用 2024-11-22
- 西門子PLC與HMI之間的時間同步 2024-11-22
- 西門子 PCS 7 V10.0新功能 2024-11-22
- 西門子V90的固件升級及下載(文末附下載鏈接) 2024-11-22
- 西門子PCS7版本V9.1系統安裝 2024-11-22
- 如何刪除已經建立的數據日志文件以減小 S7-1200 CPU 裝載存儲器空間的占用? 2024-11-22
- 如何清除西門子S7-1200數據日志文件中的數據記錄? 2024-11-22
- 西門子S7-1200如何關閉數據日志文件? 2024-11-22
- 西門子S7-1200如何打開數據日志文件?打開的數據日志個數是否有限制? 2024-11-22
- 西門子S7-1200對每個數據日志文件聲明的Zui大數據元數個數是否有限制? 2024-11-22
聯系方式
- 電 話:13510737515
- 聯系人:董海波
- 手 機:13185520415
- 微 信:13185520415