Daha önce bir Freeport iletişim örneğinden bahsetmiştik, bugün kesintili bir Freeport iletişim örneğinden bahsedeceğiz.
Panasonic serisi servo sürücülerle kontrol yaparken olduğu gibi bazı özel durumlarda, verilerin güvenliğini sağlamak için, verileri birden çok kez değiştirmemiz gerekir, bu da iletişim süresinin sıkı kontrolünü gerektirir. O zaman iletişim şu anda PLC için en önemli şeydir, bu nedenle önce PLC'nin normal işlevini kesmemiz ve iletişimin kesilmesini gerektiren iletişimi işlememiz gerekir.
Örnek: İki S7-200 SMART CPU (port 0) birbirleriyle iletişim kurmak için boş port iletişimini kullanır
(Bu makale sadece serbest port iletişimi ve kesintiyi göstermektedir. Bu iki PLC arasındaki iletişimi gerçekleştirmek istiyorsanız, aslında en iyisi Ethernet iletişimi için sihirbazı kullanmaktır. Fırsatımız olup olmadığını da açıklayacağız!)
İletişim görevi: CPU1, CPU'nun gerçek zamanlı saatini CPU2'ye göndermek için saniyede bir XMT talimatını tetikler; CPU2, CPU1 tarafından gönderilen bilgileri aldıktan sonra hemen CPU2'nin gerçek zamanlı saatini CPU1'e döndürür.
Kablolama: Her S7-200 SMART CPU bir Ethernet portu ve bir RS485 portu (port 0) sağlar.Standart CPU ayrıca SB CM01 sinyal kartını (port 1) destekler.Sinyal panosu STEP 7-Micro / WIN SMART yazılımından geçirilebilir RS232 iletişim portu veya RS485 iletişim portu olarak yapılandırın.
CPU iletişim bağlantı noktası pin ataması
1. CPU1 programlama
1.1. CPU1'in ana program programlaması şekilde gösterilmiştir:
CPU1 ana programı
Program açıklaması:
1. SMB30 = 2 # 00001001 (serbest bağlantı noktası iletişimi, baud hızı 9600 bps, 8 veri biti, eşlik yok) ayarlayın.
2. SMB87 = 2 # 10010100'ü ayarlayın, mesaj alımı için başlangıç koşulu olarak boşta hat algılamayı kullanın ve mesaj alımı için bitiş koşulu olarak karakterler arası zamanlayıcıyı kullanın.
3. Boşta kalan hat zamanlayıcısını SMW90 = 5 ms, karakterler arası zamanlayıcı SMW92 = 5 ms olarak ayarlayın ve alınan maksimum karakter sayısı SMB94 = 10'a izin verin.
4. Tamamlama olayını göndermek ve kesmeyi etkinleştirmek için INT_0 interrupt alt yordamını iletişim portu 0'a bağlayın.
5. CPU'nun gerçek zamanlı saatini her saniye okuyun ve gönderme tamponunun uzunluğunu 8 karaktere ayarlayın.
6. XMT komutunu uygulamadan önce SM87.7 = 0'ı ayarlayın ve mesaj alımını sonlandırmak için aynı anda RCV komutunu yürütün.
7. CPU'nun gerçek zamanlı saatini göndermek için saniyede bir XMT komutunu yürütün.
1.2, CPU1 tamamlama interrupt alt rutini INT_0 programlama gönderme
INT_0 kesme alt yordamı, SMB87 (SM87.7 = 1) ayarını geri yüklemek ve CPU2 yanıt bilgisini almaya başlamak için RCV komutunu yürütmek için kullanılır. Program Şekil 4'te gösterilmektedir:
CPU1 interrupt alt rutini INT_0
2. CPU2 programlama
2.1. CPU2 ana program programlaması şekilde gösterilmiştir:
CPU2 ana programı
1. SMB30 = 2 # 00001001 (serbest bağlantı noktası iletişimi, baud hızı 9600 bps, 8 veri biti, eşlik yok) ayarlayın.
2. SMB87 = 2 # 10010100'ü ayarlayın, mesaj alımı için başlangıç koşulu olarak boşta hat algılamayı kullanın ve mesaj alımı için bitiş koşulu olarak karakterler arası zamanlayıcıyı kullanın.
3. Boşta kalan hat zamanlayıcısını SMW90 = 5 ms, karakterler arası zamanlayıcı SMW92 = 5 ms olarak ayarlayın ve alınan maksimum karakter sayısı SMB94 = 10'a izin verin.
4. Tamamlama olayını almak için INT_0 interrupt alt rutini 0 iletişim portuna ve interrupt alt rutini INT_1 iletişim portu 0'a tamamlanma olayını göndermek ve kesmeyi etkinleştirmek için bağlayın.
5. Yürütmek üzere RCV komutunu çağırmak için SM0.1'i kullanın.
2.2. CPU2, INT_0 programlama tamamlama interrupt alt rutini alır
INT_0 kesme alt yordamı, CPU gerçek zamanlı saatini okumak ve gerçek zamanlı saat bilgisini göndermek için XMT komutunu çağırmak için kullanılır. Program şekilde gösterilmiştir.
CPU2 tamamlama interrupt alt rutini INT_0 alır
2.3. CPU2 gönderme tamamlama interrupt alt rutini INT_1 programlama
INT_1 interrupt alt rutini, RCV komutunu yürütmek ve yeni bir mesaj alma görevi başlatmak için kullanılır. Program Şekil 7'de gösterilmektedir.
CPU2 gönderme tamamlama interrupt alt rutini INT_0