準備作業
1、下載S7協議庫(下載)

S7最新協議庫是1.4.2,下載1.4.1即可,
2、下載lua檔案庫(下載)

為了防止兼容性問題,下載這個版本即可,
3、安裝VS軟體
本例子使用的是VS2010,其他版本也可,
4、安裝lua環境( 下載)
百度搜索:LuaForWindows_v5.1.4-46,這個版本要對應下載的lua源檔案庫
lua堆疊操作函式簡介:
1、先簡單說明下lua的堆疊:
Lua互動的主要方法是一個無處不在的虛擬堆疊,堆疊的特點是先進后出,
在Lua中,Lua堆疊就是一個struct,堆疊索引可以使用正數從堆疊底索引,也可以使用負數從堆疊頂索引,這樣做的好處是,-1永遠表示堆疊頂,1永遠表示堆疊底,如圖所示:

2、lua函式(讀取單個資料或字串):
luaL_checkint(L,-1) //檢查堆疊頂是不是一個數,并轉換為int
luaL_checkinteger(L,-1) //檢查堆疊頂是不是一個數,并轉為integer
luaL_checklong(L,-1) //檢查堆疊頂是不是一個數,并轉為long
luaL_checklstring(L,-1) //檢查堆疊頂是不是一個字串
luaL_checknumber(L,-1) //檢查堆疊頂是不是一個數
3、lua函式(寫入單個資料或字串):
lua_pushboolean(L,-1) //從堆疊頂壓入一個bool值
lua_pushinteger(L,-1) //從堆疊頂壓入一個int
lua_pushnil(L,-1) //從堆疊頂壓入nil值
lua_pushnumber(L,-1) //從堆疊頂壓入lua_Number(double)值
lua_pushstring(L,-1) //從堆疊頂壓入一個string
4、lua函式對陣列的讀寫
lua_settop(L, 0) //從堆疊頂壓入一個bool值
lua_getglobal(L,“array”) //把lua檔案內的“array”陣列加載到堆疊內
lua_rawgeti (L, index, key) //把陣列key索引的資料,放置到堆疊頂位置
void lua_rawseti (L, index,key) //把堆疊頂位置的資料,放置到陣列key索引的位置,并彈出堆疊頂的資料
index引數的含義是:讀寫陣列時指明陣列在堆疊內的位置,key引數的含義是:對陣列的索引,
注意:1、陣列在lua中是資料型別一樣的table
2、lua的table索引是從1開始的,
S7協議庫常用函式簡介:
1、int Cli_ConnectTo(S7Object Client, const char *Address,int Rack, int Slot)
建立與PLC的連接,Client是自定義資料型別,使用時直接定義即可,如S7Object Client;
Address是PLC的地址,比如“192.168.1.10”;
Rack是PLC機架號,為0既可;
Slot是PLC的插槽號,為0即可,
多說一句,機架號與插槽號,這個是西門子PLC編程軟體組態時自動生成的,可以在PLC組態中查看,具體見下圖:

2、int Cli_ReadArea(S7Object Client, int Area, int DBNumber, int Start,int Amount, int WordLen, void *pUsrData) //從PLC讀取內部區域資料
int Cli_WriteArea( S7Object Client, int Area, int DBNumber, int Start,int Amount, int WordLen, void *pUsrData); //寫入資料到PLC內部區域
讀取區域資料,在西門子PLC中,常見的區域有:I區域,Q區域,M區域,DB區域,其中I區域表示輸入,即寫PLC內的I0.0、I1.0、IB01等;其中:Q區域表示輸出,即PLC內的Q0.0、Q1.0、QB01等;M區域表示輔助輸入輸出,即PLC內的M0.0、M1.0、MB10等;DB區域資料區域,可以在內部自由定義資料,見下圖;

引數解釋:
Client是自定義資料型別,使用時直接定義即可,如S7Object Client;
Area指明要寫入到PLC的那個區域,如圖所示:
DBNumber表示DB區域的塊編號,非DB區域為0即可;
Start表示從哪里開始寫入或讀取,比如讀寫M100.1就設定成100,如果是DB區域時表示偏移量;
Amount寫入多少個資料;
int WordLen,見下圖:

*pUsrData根據WordLen,定義一段陣列既可,其中要注意的是如果進行位讀寫,定義成一個字,
3、
int Cli_DBRead( S7Object Client, int DBNumber, int Start, int Size,void *pUsrData); //按位元組讀取DB區域
int Cli_DBWrite( S7Object Client, int DBNumber, int Start, int Size,void *pUsrData);//按位元組寫入DB區域
引數解釋:
Client是自定義資料型別,使用時直接定義即可,如S7Object Client;
DBNumber表示DB區域的塊編號;
Start表示從DB區域哪里開始寫入或讀取;
Amount寫入多少個位元組;
pUsrData定義一段位元組陣列既可,陣列長度要>=Amount
總結:
1、S7協議庫的詳細說明,可以參考snap7-full-1.4.1.zip壓縮包內的:

2、以上對系統要搭建的lua環境與協議庫常用的函式做了簡要說明,下節開始,將詳細說明lua協議庫與S7協議庫如何移植,移植后如何處理編譯錯誤,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234938.html
標籤:其他
下一篇:CSU2020期中考試試題題解
