1,背景簡介
應客戶要求,我們需要設計一個烘箱,烘箱有四個倉,每個倉單獨加熱控制,PID調節溫度。溫度差別是+-0.5,硬件是S7-1200+西門子溫度模塊,以及必要的溫度感應器。
溫度控制這一塊 除了PID參數自整定耗費一點時間外,其它部分的PLC程序非常簡單。但是由於客戶有其他的設備是PLC作為Server,上位機發特殊的指令給PLC,PLC根據
自定協議回復相應的信息。所以這篇文章主要講的是:S7-1200做server,pc作為clilent去連接PLC,並發送自定義協議給PLC,PLC根據相應的自定義協議去回傳相應的數據
2,硬件和協議
2.1 硬件設備
PLC:S71200,溫度控制模塊AI8-TC
2.2 自定義協議
協議0:上位機向PLC發送獲取狀態命令: ffcommand:state;#
PLC向上位機返回狀態:
- 0-無料;1-正在高溫固化;2-高溫固化完成等待取料;3-設備停止狀態
0;1;2;2;1;0;#
6個數字分別代表6個料倉當前狀態
上位機解析字符串從第三個字節開始,前兩個字節忽略。
- 上位機向PLC發送獲取溫度命令:
ffcommand:temperature;#
PLC向上位機返回狀態:
94.5;95.0;94.8;94.7;94.6;95.0;#
6個數字分別代表6個料倉當前溫度
上位機解析字符串從第三個字節開始,前兩個字節忽略。
上位機向PLC發送開關門命令:
command:door;***;$$$;#
***—代表幾號料倉,范圍1-6
$$$—代表狀態;0—關門,1開門
PLC回復上位機料倉門狀態:
ffcommand:door;result:open;#
ffcommand:door;result:close;#
- 上位機向PLC發送獲取倉門狀態命令:
ffcommand:door_state;#
PLC回復上位機料倉門狀態:
0-未知;1-倉門開;2-倉門關;
1;2;2;2;2;2;#
6個數字分別代表6個倉門當前狀態
3,程序及步驟 3.1,使用到的指令
1.jpg,用來連接服務器指令
2.jpg 斷開與服務器的鏈接
3.jpg 用來接受服務器發送來的數據,注意:該指令的ADHOC設為true,接受動態指令長度,應為各個指令的數據長度不一樣
4.jpg 用來給服務器發送數據的指令
5.jpg 因為接收到的數據是字節數組,所以需要一個指令能把接收指令接收到的字節數組轉換為字符串的指令
6.jpg,接受到數據后再對比是哪一個指令,然后做出對應的數據回傳
6.1預先定義好的指令字符串常量
6.2,把接收數據和常量指令做對比,只截取部分
7.jpg 當然,接收到的數據是字節數組,那么發出去的也應該是字節數組,那么就需要一個連接字符的指令和把字符串轉換成字節數組的指令
7.1 連接字符串
7.2把字符串轉換成字節數組
以上這些只是大概步驟,具體的詳細實現步驟請看程序