生産を開始した方法、またはSiemens Simatic PLCのソフトウェア開発の経験

産業用ソフトウェアの試運転と開発における私の経験についてお話ししたいと思います。 記事を読むときは、ほぼ2年前に問題が発生し、それ以来多くの変化があったことを考慮してください。



それで、2014年の早春に、私は1つのプラントのコンクリート混合ユニットの3階に上がりました。 私が自由に使えるのは、2つのウィガートプラネタリーコンクリートミキサー、2つのモノレール用のKubatアドレスライン、およびコンクリートを配送する必要がある完全に爆撃されたワークショップでした。 視点で。



トリッキーな計画は何でしたか? ワークショップのあるスパンで中空のコアフローリングを、別のスパンで壁パネルの製造をゼロから始めなければなりませんでした。



中空フローリングの断面図は次のとおりです。



画像

echo.co.zaからの写真



そのため、コンクリートミキサーをテストするには、生成されたコンクリートを正常に(またはそうでない)どこかに配置する必要があります。 10個のジャムシュートのオプションは考慮されなかったため、アドレスフィード(AP)を接続する必要があります。 APの機械部分には、モノレールで転がる特別に訓練された一対のシャトル(キュー)と、半自動モードで制御されるコンクリートディストリビューターが含まれます。







Kubatのドキュメントを味わい始めます:電気部品は、314-2DPの中央制御キャビネット、2つのET200Sステーション(シャトル)、およびPowercom(Siemens PowerRailの類似物、すなわちRS-485トロリー220 / 380V)。







おっと、これが最初のレーキです。ソフトウェアソースがなく、予期されていません。 さて、特別なユーティリティでコントローラーのパスワードを開きます。 ディストリビューターでは、すべてがほぼ正常ですが、中央のラックはSTLのカーネルポリッジに逆コンパイルされます。 プログラムのほとんどはSFCで作成されているため、どのバージョンが明確ではありません。



さて、質問はありません。 まず、インストーラーを送り、モノレールに沿って通信を切り替え、電源を接続し、センサーを取り付けます。私自身はこの図を見ています:







したがって、Profibusによって制御されるNordインバーター。 私たちの場合、それは運動と回転の駆動を駆動するために使用されます。 ドキュメントをダウンロードし、制御レジスタを点灯してコードを記述します。



FUNCTION_BLOCK nord_control VAR_INPUT cmd:INT; //0 - fast stop //1 - smooth stop //2 - run to setpoint //3 - get info; setpoint:REAL; hw_addr:INT; END_VAR VAR_OUTPUT state:TNordInfo; END_VAR VAR_TEMP // Temporary Variables d: ARRAY [0..5] OF WORD; setpoint1:REAL; END_VAR VAR t:INT; c: WORD; s: WORD; cw AT c: TNord_CW; sw AT s: TNOrd_SW; st:WORD; END_VAR s:=IW[hw_addr]; //256 257 state word * state.sw:=sw; state.act_value1:=INT_TO_REAL(WORD_TO_INT(IW[hw_addr+2]))*50/16384;//258 259 state.act_value2:=INT_TO_REAL(WORD_TO_INT(IW[hw_addr+4]))*50/16384;//260 261 state.act_value3:=INT_TO_REAL(WORD_TO_INT(IW[hw_addr+6]))*50/16384;//262 263 state.w0:=IW[hw_addr+8];//264 265 state.w1:=IW[hw_addr+10];//266 267 // Statement Section CASE cmd OF 0: c:=0; cw.ack_err:=TRUE; //SWITCH OFF; cw.enable_op:=FALSE; cw.on1:=FALSE; cw.on2:=FALSE; cw.on3:=FALSE; cw.enable_op:=FALSE; cw.enable_ramp:=FALSE; cw.unfreeze_ramp:=FALSE; cw.en_setpoint:=FALSE; cw.pzd_valid:=FALSE; setpoint1:=0; t:=0; 1: cw.on1:=FALSE; 2: setpoint1:=setpoint; CASE t OF //run to setpoint 0: IF (sw.start_disabled=TRUE) THEN //wait for mains voltage t:=1; END_IF; 1: cw.on2:=TRUE; //switch to standby cw.on3:=TRUE; cw.enable_op:=TRUE; cw.enable_ramp:=TRUE; cw.unfreeze_ramp:=TRUE; cw.en_setpoint:=TRUE; cw.pzd_valid:=TRUE; cw.ack_err:=FALSE; IF (sw.ready=TRUE) AND //Wait for standby (sw.no_off2=TRUE) AND (sw.no_off2=TRUE) THEN //change to no_off3 t:=2; END_IF; 2: cw.on1:=TRUE; t:=3; END_CASE; END_CASE; IF cmd<3 THEN //Write data QW[hw_addr]:=c; st:=INT_TO_WORD(REAL_TO_INT((setpoint1*16384.0/50.0))); QW[hw_addr+2]:=INT_TO_WORD(REAL_TO_INT((setpoint1*16384.0/50.0))); END_IF; END_FUNCTION_BLOCK
      
      





ああ、シャトルはなくなったようですが、下からうれしそうな叫び声が聞こえます。 叫び声を上げて、インストーラーは急いでいる5トンの鉄片からクレーントラックに沿って脱出しようとしています。 緊急に電源を切り、休憩して人員を数えます。

少なくともある程度の視覚化があればいいと思います。 OK、タッチパネルに小さな突起を作ります。







数週間以内に、プログラムの残りの部分を終了し(フクロウについての写真があるはずです)、コンクリートを配達できるようにします...これはまだありません。



それまでの間、サーモスタットスタンドの建設は終了し、エコーラインを再び開くことができます。 ここではすべてが簡単です。 またはほぼ簡単。 車は2008年から雨と鳩の糞の中に立っていました。給油と清掃の後、トロリーとスリップフォーマーは正常に動き始めましたが、のこぎりはエラーの全画面を投げて、どこにも行かないと言います。







ドイツからの良き同志たちは助けようと熱望していますが、それはほんの数万ユーロです。 ルーブルは受け入れません。

さて、コントローラーからプログラムをダウンロードし、必要なものを理解してください。 すべてが2つの位置決め軸が詰まっているように見えます。 原則として、これは驚くべきことではありません。2つのインバーターのパワーモジュールが完全に燃え尽きます。 さて、新しいエマーソンユニドライブを注文し、時間を無駄にしないために、プラネタリーコンクリートミキサーを備えたセカのBSUに戻ります。



1つのWiggertはすでにマウントされ、接続されており、テストされているようです。 しかし、いつものように、悪魔は詳細にあります(もちろん、これは、極端に湾曲した空気接続と電気配線を除きます)。







500キログラムの精度で、不活性な分注が楽しく、うまくいきます。



数週間で、chastotniksが到着します。 それらをキャビネットに入れ、設定の転送を実行します(はい、まだプログラムにSM-Applications Plusモジュールがあります)および軸参照。







利益! 製品の生産を開始できます。 もちろん、最初にコンクリートの組成を選択した場合。



一般的に、ハッピーエンドで終了し、今日までラインは正常に機能しています。



All Articles