基于DSP/BIOS的PLC執行系統開發
2 PLC執行系統的具體實現
2.1 數據結構定義
1)PLC指令代碼數據結構的定義。PLC用戶程序在系統內部以一定的二進制格式存放,采用如下指令開辟一個a字節的內存區存放編譯后的PLC指令代碼,內存區大小a根據實際情況設定。
long*plc_pt;
plc_pt=(long*)malloc(a);
2)PLC執行指令結構體的定義。PLC指令代碼主要包含內容為指令類型及變量地址,定義如下PLC執行指令結構體:
struct plc_code_type //PLC執行指令結構體
{
unsigned char code_type;//指令類型
unsigned short pt addr;//變量地址
};
由此,在初始化時定義一個pk_code_type類型的指針直接指向PLC指令代碼區.在進行PLC指令解析時,可直接移動該指針進行指令解析并輸出。
2.2 PLC指令解析
PLC執行系統的一個關鍵問題在于PLC指令的解析,利用DSP的C語言,建立相應的PLC指令的執行函數庫。PLC用戶程序可看成由多段執行塊組成,每個執行塊包括條件指令及執行指令。下面分為條件指令解析及執行指令解析來進行描述。
2.2.1 條件指令解析
首先定義一個變量來保存條件指令解析結果,以便在解析執行指令時根據此條件指令解析結果進行執行指令處理。
例如常開觸點(LD)可以用如下函數實現:
void plcLD(plc_code_typepc)
//pc表示當前指令在用戶程序中的指針位置
{ if(1==pc->pt_addr)//指令獲取的地址為1
{
plc_result=0x01;//閉合狀態置位
}
}
2.2.2 執行指令解析
執行指令則根據當前執行塊條件指令結果來判斷對元件地址進行相應處理。例如置位指令(SET)可以用如下函數實現:
void plcSET(plc_code_typepc)
{ if(plc_result1)
//判斷條件指令,閉合,有輸出
{
pc->pt_addr|=0xff;//對應地址置位
}
}
這樣,逐個對PLC執行塊進行解析,輸入和輸出單元的刷新同樣利用函數來實現,最后通過輸出口送出控制量,實現對用戶PLC程序的執行控制。
2.3 PLC執行系統運行流程
首先在DSP/BIOS配置工具下的Scheduling項目中建立一個任務線程,比如為PLC_Deal_Task,并對該任務函數的優先級及其它相關內容進行設置,則可直接在PLC_Deal_Task線程中進行PLC指令解析處理,并實現PLC的循環掃描功能。
總體設計思想如下:設定一級程序的執行周期為m個指令計數執行一次,m與掃描周期有關。在進入二級循環后,首先判斷指令計數是否大于m,未到m,則進入執行二級程序。如果條件滿足,跳出循環,1周期完成,具體調度流程如圖2所示。本文引用地址:http://www.104case.com/article/189597.htm
評論