最近一直在用西門子SmartPLC,由于專案需求自定義協議,為了資料的準確性用了CRC校驗,模塊兼容Modbus_RTU,自定義報文格式,
此模塊主要用的是SmartPLC,指標型別,通過尋址自動在發送資料末端端添加CRC校驗,資料接端通過接收到的資料通過CRC校驗資料的準確性,參考西門子官網自由口通訊程式并進行二次封裝,官網鏈接:官網程式參考鏈接,程式適合做參考和根據自己的業務優化,有更好的思路可以評論區留言,
1、程式框架四部分
子程式名稱
Proc(SBR6) --------------------------- COM0_Init //埠初始化配置
Proc(INT0) --------------------------- COM0SendDataFinish //發送資料完成進入中斷程式
Proc(SBR1) --------------------------- CRC_16 //CRC資料校驗
Proc(SBR7) --------------------------- COM0_sys //發送和接收程式及資料校驗
Proc(SBR5)---------------------------- SensorSys //呼叫測驗
符號表:定義的是必須的全域變數,因為在中斷中不支持地址傳入(試過好多方式都失敗),不知道有沒有大神知道
VB7500------------------------------- StepCOM0Global //通訊中用的執行步數標志
VB7700------------------------------- ReciveBufCOM0Global //接收資料的緩沖區,最大接收255個位元組,到8000的地址盡量都別用
VB7504------------------------------- TimeCOM0Global //接收資料系統開始時間
VB7508------------------------------- OverTimeCOM0Global //保存等待接收資料的時長


2、COM0_Init 程式塊
初始化程式直接截圖就不過多的介紹了,官方手冊上有說明,
接收資料設定100個位元組可以根據需求去修改,

3、COM0SendDataFinish 程式塊
中斷程式塊,看官網示例里面有說明,
定義的公用變數主要用在中斷中,

4、CRC_16 資料校驗
網上一大堆講解需要的自行搜索理解,

5、COM0_sys 發送接收主程式
5.1 輸入引數的基本介紹區域變數,
L0.0------------------------------------ StartMasterBit //主站Bit位,開始執行程式
LD1------------------------------------ NumSendByte //發送資料的位元組數,發送多少位位元組
LD5------------------------------------ ErrRs485Byte //通訊錯誤 0/1,判斷標準是從站是否有回傳資料,100ms無回傳就判斷例外置1
LD9------------------------------------ ErrDataByte //資料接收到后,CRC校驗,如果錯誤置地址為1
LD13---------------------------------- ReveiceDataBuf //資料的接收地址,可以根據自己暫存器的定義去動態修改接收的地址
LW17---------------------------------- CountCrc //臨時變數,發送資料需要校驗的位數
LW19 --------------------------------- CRCresult //資料校驗結果
LW21 --------------------------------- ReveiceCRCresult //接收資料校驗和

5.2 主呼叫程式段:SensorSys
結合實際資料呼叫情況分析,
發送的資料位8個位元組:04 03 00 00 00 09 xx xx
下面(圖①) 呼叫和定義

圖①
程式段1:COM0_sys 根據(圖①)傳入的引數進行分析
要根據標記符號的顏色及標記符號的順序理解計算地址和地址的值 ,即可看懂(寫的時候沒注意細節)


程式段1資料發送完成,進入上圖的中斷程式,后進入程式段2,官網中有中斷及例子的說明,自行看即可,
程式段2:COM0_sys 結合官網例子說明結合查看

程式段3: COM0_sys 手動關閉接收資料

程式段4:COM0_sys 接收的資料進行CRC校驗


程式段5:COM0_sys 資料接收賦值,并清除快取區資料,進行下次通訊

實際應用測驗 SensorSys
下圖是發送出來的資料:04 03 00 00 00 09 CRC校驗

接收到的資料:正常狀態

斷線狀態:

資料例外狀態:

總結
上面程式就是簡單的用在專案的指標應用,我們可以傳入很少的引數,做業務邏輯,同時可以節省有限的子程式變數,可以通過很少的程式塊來完成專案,減少硬體記憶體的位元組數,可以用記憶體小的PLC,做一些復雜的專案,提高自己的編程能力,深層次的了解PLC的運行原理,
程式還有很多不足之處,希望大神在評論區指出,
如有需要程式參考,請聯系郵箱:[email protected]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502920.html
標籤:其他
上一篇:實作艾爾登法環中的大盧恩效果
