德宏州西門子一級代理,德宏州西門子一級代理
{心中有空間,夢想就有可能}
德國制造: 現貨 聯 系 人: 黃勇《黃工》 24小時聯系手機: 13701633515
全新原裝: 參數
質量保證: 保修
價格優勢: 特價
我公司大量現貨供應,價格優勢,品質保證,德國原裝進口

德宏州西門子一級代理
PLC編輯符號的問題
當我編輯符號的時候有時候不好用 說數據類型不一致 寫地址的時候顯示紅色字體 是不是 必須得保持數據一致呢 大家可以分析以下原因嗎

答:你定義的數據類型一定要和你所用之處的類型保持一致,否則寫上去的變量是紅色的。
如:一個塊的輸入引腳的類型是INT,而你定義變量時選擇的類型是Word或是其他類型,那當你把該變量寫到INT引腳后,此變量為紅色。
修改你的變量類型。
西門子PLC網絡讀寫指令向導使用指南
PPI協議是專門為S7-200開發的通信協議。S7-200 CPU的通信口(Port 0、Port 1)均支持PPI通信協議。S7-200 CPU的PPI網絡通信是建立在RS-485網絡的硬件基礎上,因此其連接屬性和需要的網絡硬件設備與其他RS-485網絡一致。
1 網絡讀寫(NETR/NETW)指令介紹
網絡讀寫指令一般用于S7-200 CPU之間的PPI網絡通信。PPI通信前要保證PPI網絡上的所有站點都應當有各自不同的網絡地址,否則通信不會正常進行。另外,網絡讀寫指令進行編程和應用時要注意以下幾點:1) 在程序中可以使用任意條網絡讀寫指令,但是在同一時刻,最多只能有8條網絡讀寫指令被激活;2) 每條網絡讀寫指令可以從遠程站點讀取/寫入最多16個字節的信息;3) 使用NETR/NETW指令向導可以編輯最多24條網絡讀寫指令,其核心是使用順序控制指令,這樣在任一時刻只有一條NETR/NETW指令有效;4) 每個CPU的端口只能配置一個網絡讀寫指令向導。 2 網絡讀寫指令向導組態
2.1 硬件連接
下面通過一個實例(兩臺S7-200 PLC之間的通信)來介紹如何使用網絡讀寫指令向導。首先,兩個S7-200之間的硬件連接需要一根標準DP電纜加兩個DP總線插頭。兩臺S7-200的RS485通信端口連接方式,可參考以下圖片中的連接方式(如果PLC有兩個通信端口,則任意端口都可進行配置,本例中兩個PLC均以Port 0口做PPI通信使用),如圖1所示。
圖1 兩臺PLC的網絡連接 2.2 NETR/NETW向導組態過程
2.2.1設定通信站地址
首先,用PC/PPI編程電纜將兩臺PLC的網絡站地址分別設置為2和3,波特率都為9.6Kbps。這時,將編程電纜連接到任一個CPU帶可編程插口的DP插頭上,查找兩臺PLC的站地址,如圖2所示。
圖2 設定兩臺CPU的網絡地址 在本例中,選定通信地址為3的PLC為網絡主站,并對其進行向導配置。選定要做為通信主站的CPU地址,點擊確認后即可進入該CPU的編程界面。另外,網絡讀寫指令向導會自動將CPU設置成主站模式,不必另行編程設置,只需為主站編寫通信程序,從站直接使用通信緩沖區中的數據,或將數據整理到通信區即可。 2.2.2 向導配置步驟
進入到編程畫面后,點擊工具菜單欄,找到指令向導選項,準備進入網絡讀/寫功能的向導配置模式,如圖3所示。
圖3 進入指令向導編程界面打開指令向導界面,選擇NETR/NETW指令功能,如圖4所示。
| 6ES7 291-8GF23-0XA0 | MC291,新CPU22x存儲器盒,64K |
| 6ES7 297-1AA23-0XA0 | CC292,CPU22x時鐘/日期電池盒 |
| 6ES7 291-8BA20-0XA0 | BC293,CPU22x電池盒 |
| 6ES7 290-6AA20-0XA0 | 擴展電纜,I/O擴展,0.8米,CPU22x/EM |
| 6ES7 901-3CB30-0XA0 | 編程/通訊電纜,PC/PPI,帶光電隔離,5-開關,5m |
| 6ES7 901-3DB30-0XA0 | 編程/通訊電纜,PC/PPI,帶光電隔離,USB接口,5-開關 |
| 6ES7 292-1AD20-0AA0 | CPU22x/EM端子連接器塊,7個端子,可拆卸 |
| 6ES7 292-1AE20-0AA0 | CPU22x/EM端子連接器塊,12個端子,可拆卸 |
| 6ES7 292-1AG20-0AA0 | CPU22x/EM連接器塊,18個端子,可拆卸 |
| 6AV6 640-0AA00-0AX0 | TD400C文本顯示器 |
| 6EP1 332-1SH31 | 專為S7-200 設計電源,24V/3.5A 可并聯5個 |
| | |
| 6ES7 272-0AA30-0YA0 | TD200文本顯示器 |
| 6XV1830-0EH10 | 網絡總線 |
| 6ES7972-0BB12-0XA0 | 網絡總線連結器,帶編程口,垂直電纜出線 |
| 6ES7972-0BA12-0XA0 | 網絡總線連結器,不帶編程口,垂直電纜出線 |
| 6ES7972-0BA41-0XA0 | 網絡總線連結器,不帶編程口,35度垂直電纜出線 |
| 6ES7972-0BB41-0XA0 | 網絡總線連結器,帶編程口,35度垂直電纜出線 |
| | |
| 6ES7901-0BF00-0AA0 | PLC跟屏通訊電纜 |
運用VC#編程通過OPC方式實現PC機與西門子PLC通訊
1、 配置OPC服務器
對于服務器的配置與同步通訊的配置一樣,這里不需再講解,若有不清楚的,可以參閱之前發布的<運用VC#編程通過OPC方式實現PC機與西門子PLC通訊>
2、 OPC編程
變量組、項的命名規則與同步通訊的一樣,這里不再描敘,下面主要就開發一個異步通訊類 AsynServer來講解如何編程。
<1>、引用
在VC#開發環境中添加對OpcRcw.Da庫以及OpcRcw.Comn庫的引用,該庫屬于.NET庫,不屬于COM庫,西門子雖然編寫了類庫,以提供對.NET平臺的支持,但這些類庫仍然難于編程,里面包含了大量的在托管和非托管區傳輸數據,因此我們需要在它的基礎上再開發一個類庫,以簡化以后的編程,首先在類的開頭使用命名空間:
using OpcRcw.Comn;
using OpcRcw.Da;
using System.Runtime.InteropServices;
using System.Collections;
<2>、編程
異步編程的原理就是在OPC服務器那邊檢測當前活動的變量組,一但檢測到某一個變量,譬如變量Q0.0從1變成0,就會執行一個回調函數,以實現針對變量發生變化時需要實現的動作,在這里可以采用委托來實現該功能。
1、 在命名空間的內部、類 AsynServer聲明之前添加委托的申明:
// 定義用于返回發生變化的項的值和其對應的客戶句柄
public delegate void DataChange(object[] values,int[] itemsID);
2、 該類繼承于西門子提供的庫接口IOPCDataCallback
public class AsynServer:IOPCDataCallback
在類的開頭部分聲明變量:
struct groupStru
{
public int groupID;
public object groupObj;
}
internal const int LOCALE_ID = 0x407; //本地語言
private Guid iidRequiredInterface;
private string serverType="";
private int hClientGroup = 0; //客戶組號
private int nSvrGroupID; // server group handle for the added group
private Hashtable hashGroup; //用于把組收集到一起
private int hClientItem=0; //Item號
3、編寫構造函數,接收委托參數已確定當數據發生變化時需要執行的方法入口點:
//創建服務器
//svrType 服務器類型的枚舉
//dataChange 提供用于在數據發生變化時需要執行的函數入口
public AsynServer(ServerType svrType,DataChange dataChange)
{
switch(svrType)
{
case ServerType.OPC_SimaticHMI_PTPR
serverType="OPC.SimaticHMI.PTPro";break;
case ServerType.OPC_SimaticNET:
serverType="OPC.SimaticNET";break;
case ServerType.OPC_SimaticNET_DP:
serverType="OPC.SimaticNET.DP";break;
case ServerType.OPC_SimaticNET_PD:
serverType="OPC.SimaticNET.PD";break;
case ServerType.OPCServer_WinCC:
serverType="OPCServer.WinCC";break;
}
hashGroup=new Hashtable(11);
dtChange=dataChange;
}
4、創建服務器
// 創建一個OPC Server接口
//error 返回錯誤信息
//若為true,創建成功,否則創建失敗
public bool Open(out string error)
{
error="";bool success=true;
Type svrComponenttyp ;
//獲取 OPC Server COM 接口
iidRequiredInterface = typeof(IOPCItemMgt).GUID;
svrComponenttyp = System.Type.GetTypeFromProgID(serverType);
try
{
//創建接口
pIOPCServer =(IOPCServer)System.Activator.CreateInstance(svrComponenttyp);
error="";
}
catch (System.Exception err) //捕捉失敗信息
{
error="錯誤信息:"+err.Message;success=false;
}
return success;
}
5、 編寫添加Group的函數
///
/// 添加組/// /// 組名/// /創建時,組是否被激活/// //組的刷新頻率,以ms為單位/// 返回錯誤信息/// 若為true,添加成功,否則添加失敗public bool AddGroup(string groupName,int bActive,int updateRate,out string error){ error="";bool success=true;int dwLCID = 0x407; //本地語言為英語 int pRevUpdateRate;float deadband = 0;// 處理非托管COM內存GCHandle hDeadband;IntPtr pTimeBias = IntPtr.Zero;hDeadband = GCHandle.Alloc(deadband,GCHandleType.Pinned);try{pIOPCServer.AddGroup(groupName, //組名bActive, //創建時,組是否被激活updateRate, //組的刷新頻率,以ms為單位hClientGroup, //客戶號pTimeBias, //這里不使用(IntPtr)hDeadband,dwLCID, //本地語言out nSvrGroupID, //移去組時,用到的組ID號out pRevUpdateRate, //返回組中的變量改變時的最短通知時間間隔ref iidRequiredInterface,out pobjGroup1); //指向要求的接口hClientGroup=hClientGroup+1; groupStru grp=new groupStru();grp.groupID=nSvrGroupID;grp.groupObj=pobjGroup1;this.hashGroup.Add(groupName,grp);//儲存組信息// 對異步操作設置回調,初始化接口pIConnectionPointContainer = (IConnectionPointContainer)pobjGroup1;Guid iid = typeof(IOPCDataCallback).GUID;pIConnectionPointContainer.FindConnectionPoint(ref iid,out pIConnectionPoint);pIConnectionPoint.Advise(this,out dwCookie);}catch (System.Exception err) //捕捉失敗信息{error="錯誤信息:"+err.Message;success=false;}finally{if (hDeadband.IsAllocated) hDeadband.Free();}return success;} 6、 編寫激活、或者取消激活組的函數 在同步編程中對于組的激活或者取消激活沒有實質的意義,但在異步通訊編程中卻異常重要,這是因為OPC服務器只對當前處于活動狀態的組中的變量進行監控,同時這也是很有必要的,因為我們可以把不同界面中的變量編程不同的組,即同一界面中的變量規成一個組,而在某一時刻提供給用戶的只有一個界面,讓該界面中用到的組處于活動狀態,這樣執行委托調用時只會執行于該界面中有關的變量檢測,而如果讓所有的組處于活動狀態,則當前沒有顯示給用戶的界面用到的變量若發生變化也會觸發對委托函數的調用,這根本是沒有必要的,同時會大大降低程序的性能,請嚴格控制組的激活。////// 激活或者取消激活組/// /// 指定組名/// true為激活,false為取消激活/// 若有錯誤,返回錯誤信息/// 若為true,添加成功,否則添加失敗public bool AciveGroup(string groupName,bool toActive,out string error){error="";bool success=true;//通過名稱獲取組object grp=((groupStru)hashGroup[groupName]).groupObj;IOPCGroupStateMgt groupStateMgt=(IOPCGroupStateMgt)grp;//初始化傳遞參數IntPtr pRequestedUpdateRate = IntPtr.Zero; //由客戶指定的Item更新間隔時間int nRevUpdateRate = 0; //由服務器返回的能夠更新的最短時間間隔IntPtr hClientGroup = IntPtr.Zero; //客戶組IntPtr pTimeBias = IntPtr.Zero;IntPtr pDeadband = IntPtr.Zero;IntPtr pLCID = IntPtr.Zero; // 激活或者取消激活組int nActive = 0; GCHandle hActive = GCHandle.Alloc(nActive,GCHandleType.Pinned);if(toActive)hActive.Target = 1;elsehActive.Target = 0;try {groupStateMgt.SetState(pRequestedUpdateRate,out nRevUpdateRate,hActive.AddrOfPinnedObject(),pTimeBias,pDeadband,pLCID,hClientGroup); }catch(System.Exception err){error="錯誤信息:"+err.Message;success=false;}finally{hActive.Free(); }return success;}7、 向指定的組中添加變量的函數////// 向指定的組添加一系列項/// /// 指定組名/// 完整的item名數組/// 由服務器返回讀寫數據時需要使用的item號/// 無錯誤,返回true,否則返回falsepublic bool AddItems(string groupName,string[] itemsName,int[] itemsID){bool success=true;OPCITEMDEF[] ItemDefArray=new OPCITEMDEF[itemsName.Length];for(int i=0;i {hClientItem=hClientItem+1; //客戶項自動加1ItemDefArray[i].szAccessPath = ""; // 可選的通道路徑,對于Simatiic Net不需要。ItemDefArray[i].szItemID = itemsName[i]; // ItemID, see aboveItemDefArray[i].bActive = 1; // item is activeItemDefArray[i].hClient = hClientItem; // client handle ,在OnDataChange中會用到ItemDefArray[i].dwBlobSize = 0; // blob sizeItemDefArray[i].pBlob = IntPtr.Zero; // pointer to blob ItemDefArray[i].vtRequestedDataType = 4; //DWord數據類型}//初始化輸出參數IntPtr pResults = IntPtr.Zero;IntPtr pErrors = IntPtr.Zero;try {// 添加項到組object grp=((groupStru)hashGroup[groupName]).groupObj;((IOPCItemMgt)grp).AddItems(itemsName.Length,ItemDefArray,out pResults,out pErrors);int[] errors = new int[itemsName.Length]; IntPtr pos = pResults;Marshal.Copy(pErrors, errors, 0,itemsName.Length);for(int i=0;i {if (errors[i] == 0){OPCITEMRESULT result = (OPCITEMRESULT)Marshal.PtrToStructure(pos, typeof(OPCITEMRESULT));itemsID[i] = result.hServer; pos = new IntPtr(pos.ToInt32() + Marshal.SizeOf(typeof(OPCITEMRESULT)));}else{String pstrError;pIOPCServer.GetErrorString(errors[0],0x407,out pstrError); success=false;break;}}SetItenClient(groupName,itemsID,itemsID); //要求始終只有一個組被激活,才不會引起沖突。}catch (System.Exception err) // catch for error in adding items.{success=false;//error="錯誤信息:"+error+err.Message;}finally{// 釋放非托管內存if(pResults != IntPtr.Zero){Marshal.FreeCoTaskMem(pResults);pResults = IntPtr.Zero;}if(pErrors != IntPtr.Zero){Marshal.FreeCoTaskMem(pErrors);pErrors = IntPtr.Zero; }}return success;}
| 接口模板 | |
| 6ES7 151-1AA04-0AB0 | 標準型接口模塊 IM151-1 |
| 6ES7 151-1AB02-0AB0 | ET 200S IM 151 光纖接口模板 |
| 6ES7 151-1BA02-0AB0 | 高性能型接口模塊 IM151-1 |
| 6ES7 151-1CA00-0AB0 | 基本型接口模塊 IM151-1 |
| 6ES7 151-7AB00-0AB0 | ET 200S IM 151 帶CPU 光纖接口模板 |
| 6ES7 138-4HA00-0AB0 | DP-主站模塊(for CPU only) |
| 光纖附件 | |
| 6GK1 901-0FB00-0AA0 | 單工連接器(100個) |
| 6ES7 195-1BE00-0XA0 | 插頭適配器(50個) |
| 電源模板 | |
| 6ES7 138-4CA01-0AA0 | PM-E DC 24V 用于電子模板 |
| 6ES7 138-4CB11-0AB0 | PM-E DC 24V 至 AC 120/230V 用于電子模板 |
| 6ES7 138-4CF02-0AB0 | 總線安全型電源管理模塊PM-E;24V 直流 |
| 電子模板 | |
| 開關量輸入模板 | |
| 6ES7 131-4BB01-0AA0 | 2路開關量輸入 24VDC 標準 (5塊) |
| 6ES7 131-4BB01-0AB0 | 2路開關量輸入 24VDC 高性能 (5塊) |
| 6ES7 131-4BD01-0AA0 | 4路開關量輸入 24VDC 標準 (5塊) |
| 6ES7 131-4BD01-0AB0 | 4路開關量輸入 24VDC 高性能 (5塊) |
| 6ES7 131-4BD51-0AA0 | 4路開關量源輸入 24VDC 標準 (5塊) |
| 6ES7 131-4CD00-0AB0 | 4路開關量輸入 UC 24V...48V 帶 LED SF (組故障)每包裝5個 |
| 6ES7 131-4EB00-0AB0 | 2路開關量輸入 120VAC (5塊) |
| 6ES7 131-4FB00-0AB0 | 2路開關量輸入 230VAC (5塊) |
| 6ES7 131-4RD00-0AB0 | 4路開關量輸入 DC 24V NAMUR 15 MM 寬,帶LED SF ,每包裝5個 |

S7-200 PLC的存儲器空間大致分為三個空間,即程序空間、數據空間和參數空間。
1.程序空間
該空間主要用于存放用戶應用程序,程序空間容量在不同的CPU中是不同的。另外CPU中的RAM區與內置EEPROM上都有程序存儲器,但它們互為映像,且空間大小一樣。
2.數據空間
該空間的主要部分用于存放工作數據稱為數據存儲器,另外有一部分作寄存器使用稱為數據對象。
(1)數據存儲器 它包括變量存儲器(V),輸入信號緩存區(輸入映象存儲器I),輸出信號緩沖區(輸出映象存儲區Q),內部標志位存儲器(M)又稱內部輔助繼電器,特殊標志位存儲器(SM)。除特殊標志位外,其他部分都能以位、字節、和雙字的格式自由讀取或寫入。
變量存儲器(V)是保存程序執行過程中控制邏輯操作的中間結果,所有的V存儲器都可以存儲在永久存儲器區內,其內容可在與EEPROM或編程設備雙向傳送。
輸入映象存儲器(I)是以字節為單位的寄存器,它的每一位對應于一個數字量輸入結點。在每個掃描周期開始,PLC依次對各個輸入結點采樣,并把采樣結果送入輸入映象存儲器。PLC在執行用戶程序過程中,不再理會輸入結點的狀態,它所處理的數據為輸入映象存儲器中的值。
輸出映象存儲器(Q)是以字節為單位的寄存器,它的每一位對應于一個數字輸出量結點。PLC在執行用戶程序的過程中,并不把輸出信號隨時送到輸出結點,而是送到輸出映象存儲器,只有到了每個掃描周期的末尾,才將輸出映象寄存器的輸出信號幾乎同時送到各輸出結點。使用映象寄存器優點:①同步地在掃描周期開始采樣所有輸入點,并在掃描的執行階段凍結所有輸入值;②在程序執行完后再從映象寄存器刷新所有輸出點,使被控系統能獲得更好穩定性;⑧存取映象寄存器的速度高于存取I/O速度,使程序執行的更快;④I/O點只能以位為單位存取,但映象寄存器則能以位、字節、雙字進行存取。因此,映象寄存器提供了更高的靈活性。另外對控制系統中個別I/O點要求實時性較高的情況下,可用直接I/O指令直接存取輸入/輸出點。
內部標志位(M)又稱內部線圈(內部繼電器等),它一般以位為單位使用,但也能以字、雙字為單位使用。內部標志位容量根據CPU型號不同而不同。
特殊標志位(SM)用來存儲系統的狀態變量和有關控制信息,特殊標志位分為只讀區和可寫區,具體劃分隨CPU不同而不同。
(2)數據對象 數據對象包括定時器、計數器、高速計數器、累加器、模擬量輸入/輸出。
定時器類似于繼電器電路中的時間繼電器,但它的精度更高,定時精度分為lms,10ms和100ms三種,根據精度需要由編程者選用。定時器的數量根據CPU型號不同。
計數器的計數脈沖由外部輸入,計數脈沖的有效沿是輸入脈沖的上升沿或下降沿,計數的方式有累加1和累減1兩種方式。計數器的個數同各CPU的定時器個數。
高速計數器與一般計數器不同之處在于,計數脈沖頻率更高可達2kHz/7kHz,計數容量大,一般計數器為16位,而高速計數器為32位,一般計數器可讀可寫,而高速計數器一般只能作讀操作。
在S7-200CPU中有4個32位累加器,即AC0~AC3,用它可把參數傳給子程序或任何帶參數的指令和指令塊。此外,PLC在響應外部或內部的中斷請求而調用中斷服務程序時,累加器中的數據是不會丟失的,即PLC會將其中的內容壓入堆棧。因此,用戶在中斷服務程序中仍可使用這些累加器,待中斷程序執行完返回時,將自動從堆棧中彈出原先的內容,以恢復中斷前累加器的內容。但應注意,不能利用累加器作主程序和中斷服務子程序之間的參數傳遞。
模擬量輸入/輸出可實現模擬量的A/D和D/A轉換,而PLC所處理的是其中的數字量。
3.參數空間
用于存放有關PLC組態參數的區域,如保護口令、PLC站地址、停電記憶保持區、軟件濾波、強制操作的設定信息等,存貯器為EEPROM。