Mitsubishi F1-20MR-ES
Linux 系統如何改成硬實時?
以上描述的幾個因素,對 Linux 實現真正的實時性構成了很大的障礙,但是現實世界又的確有很多場合需要 Linux 具有硬實時,那么就要針對上面的每一個因素提出解決方案。
目前主流的解決方案有 2 個:
單內核解決方案:給 Linux 內核打補丁,解決上面提到的幾個問題,例如:RT-Preempt;
雙內核解決方案:在硬件抽象層之上,運行 2 個內核:實時內核 + Linux 內核,它們分別向上層提供 API 函數,例如:Xenomai;
這 2 種解決方案分別有不同的實現,從調研情況來看,RT-Preempt 和 Xenomai 是使用比較多的,下面分別來看一下他們的優缺點。
(1)RT-Preempt
這種方式主要是對 Linux 內核進行打補丁,解決了上面所說的幾個問題:內核不可搶占、自旋鎖、關中斷以及終端優先級的問題。
至于每一個問題是如何解決的,由于篇幅關系,這里就不介紹了,感興趣的小伙伴如果需要的話,可以深入了解一下。
由于是直接在 Linux 內核上打補丁(以后肯定會合并到主分支中的),因此對于應用程序開發來說,操作系統向上層提供的 API 接口函數可以保持不變,這對應用程序開發來說是一件好事情。
(2)Xenomai
Xenomai是一個 Linux 內核的實時開發框架,它希望通過無縫地集成到 Linux 環境中來給用戶空間應用程序提供的,與接口無關的硬實時性能。下面是 Xenomai 的架構圖:
在硬件抽象層之上,是 2 個并列的域(內核),這 2 個內核分別向上層提供自己的 API 接口函數。
圖中 glibc 是 Linux 系統提供的庫函數,應用程序通過調用庫函數和系統調用來編寫程序。
Xenomai 也提供了相應的庫函數 libcobalt ,這個庫函數是需要我們在用戶層編譯、安裝的,就像安裝第三方庫一樣。
此外,Xenomai 還參考不同的操作系統風格,提供了好幾套 API 函數(之前的說法是:皮膚),API 接口函數在這里:
從圖中可以看到,Alchemy API 這套接口提供的功能更完善,提供了:定時器、內存管理、條件變量、事件、互斥鎖、消息隊列、任務(可以理解為線程)等 API 函數。這一套 API 函數中具體的功能與 POSIX 標準大體相同,在一些細節上存在一些差異。
由于 Xenomai 向應用層提供的 API 函數是獨立的一套,因此,如果我們需要創建實時任務,那么就要調用這一套接口函數來創建任務,包括使用其中的一些資源(例如:內存分配)。而且文檔中也提出了一些注意點,例如:某些資源不能在 Xenomai 與 Linux 系統之間混用。
Mitsubishi F1-20MR-ES
6ES7971-0BA00
6ES7971-0BA00/ with soldering tag
6ES7971-0BA00/Pin
S7-300/400 connecting cable with IDC connectors 16x0,14mm2
6ES7923-0Bx
S7-400 IF 964 - DP Interface Module DP Master
6ES7964-2AA04-0AB0
6ES7964-2AA01-0AB0
S7-400 16AI +/-10V, +/-20mA, 4-20mA
6ES7431-0HH00-0AB0
S7-400 16DI 24-60VUC
6ES7421-7DH00-0AB0
S7-400 16DO 24VDC 2A optic. isolated
6ES7422-1BH11-0AA0
S7-400 32DI 24VDC opt.isolated
6ES7421-1BL01-0AA0
6ES7421-1BL00-0AA0
S7-400 32DO 24VDC 0,5A floating Diagnostics
6ES7422-7BL00-0AB0
S7-400 32DO 24VDC 0,5A opt.isolated
6ES7422-1BL00-0AA0
S7-400 8AI Resistor/PT100/NI100 isolated
6ES7431-7KF10-0AB0
S7-400 8AI U/I/Resist/Thermo/Pt100
6ES7431-1KF10-0AB0
S7-400 8AI/U/I/Resist
6ES7431-1KF00-0AB0
S7-400 8AO opt. Isolated
6ES7432-1HF00-0AB0
S7-400 Adapter module
6ES7470-0AA00-0AA0
S7-400 Cable Duct
6ES7408-0TA00-0AA0
S7-400 CP441-1 for point to point
6ES7441-1AA04-0AE0
6ES7441-1AA03-0AE0
6ES7441-1AA00-0AE0
S7-400 CP441-2 for point to point
6ES7441-2AA04-0AE0
6ES7441-2AA03-0AE0
6ES7441-2AA02-0AE0
6ES7441-2AA01-0AE0
S7-400 CP443-1
6GK7443-1EX20-0XE0
6GK7443-1EX11-0XE0
6GK7443-1EX10-0XE0
S7-400 CP443-1
6GK7443-1EX02-0XE0
6GK7443-1EX01-0XE0
6GK7443-1EX00-0XE0
S7-400 CP443-1 ADVANCED
6GK7443-1EX41-0XE0
S7-400 CP443-5
6GK7443-5DX04-0XE0
6GK7443-5DX02-0XE0
6GK7443-5DX00-0XE0
S7-400 CPU 412-1
6ES7412-1XJ05-0AB0
S7-400 CPU 412-1
6ES7412-1XF00-0AB0
S7-400 CPU 412-2
6ES7412-2XG00-0AB0
6ES7412-2XJ05-0AB0
S7-400 CPU 413-1
6ES7413-1XG02-0AB0
6ES7413-1XG01-0AB0
S7-400 CPU 413-2DP
6ES7413-2XG02-0AB0
6ES7413-2XG01-0AB0
6ES7413-2XG00-0AB0
S7-400 CPU 414-1
6ES7414-1XG02-0AB0
S7-400 CPU 414-2
6ES7414-2XG01-0AB0
6ES7414-2XG02-0AB0
6ES7414-2XG03-0AB0
6ES7414-2XG04-0AB0
S7-400 CPU 414-2
6ES7414-2XK05-0AB0
S7-400 CPU 414-2 DP
6ES7414-2XJ00-0AB0
6ES7414-2XJ01-0AB0
S7-400 CPU 414-3
6ES7414-3XJ00-0AB0
6ES7414-3XJ04-0AB0
6ES7414-3XM05-0AB0
S7-400 CPU 414-3 PN/DP
6ES7414-3EM05-0AB0
S7-400 CPU 416-1
6ES7416-1XJ02-0AB0
S7-400 CPU 416-2
6ES7416-2XL01-0AB0
6ES7416-2XL00-0AB0
S7-400 CPU 416-2
6ES7416-2XK00-0AB0
6ES7416-2XK01-0AB0
6ES7416-2XK02-0AB0
6ES7416-2XK04-0AB0
6ES7416-2XN05-0AB0
S7-400 CPU 416-3
6ES7416-3XL00-0AB0
S7-400 CPU 416-3
6ES7416-3XR05-0AB0
S7-400 CPU 416-3 PN/DP
6ES7416-3ER05-0AB0
S7-400 CPU 416F-2
6ES7416-2FN05-0AB0
S7-400 CPU416F-3 PN/DP
6ES7416-3FR05-0AB0
S7-400 ER1 Exp. Rack
6ES7403-1TA01-0AA0
S7-400 FM 450-1 counter card
6ES7450-1AP00-0AE0
S7-400 FM 451 Positioning module 3 channels
6ES7451-3AL00-0AE0
S7-400 FM 453 Positioning module
6ES7453-3AH00-0AE0
S7-400 Front connector with Twisted ribbon cable connection
6ES7921-4AB00-0AA0
S7-400 Frontconnector 48pin scre-type contact
6ES7492-1AL00-0AA0
S7-400 Frontconnector 48pin, spring contact
6ES7492-1BL00-0AA0
S7-400 IM463-2
6ES7463-2AA00-0AA0
S7-400 Interface module RS422/RS485
6ES7963-3AA00-0AA0
S7-400 Interface module TTY
6ES7963-2AA00-0AA0
S7-400 PS 10A 120/230VAC
6ES7407-0KA02-0AA0
6ES7407-0KA01-0AA0
6ES7407-0KA00-0AA0
S7-400 PS 20A 120/230VAC
6ES7407-0RA01-0AA0
S7-400 PS 4A 120/230VAC
6ES7407-0DA02-0AA0
S7-400 PS405 10A 24VDC
6ES7405-0KA02-0AA0
6ES7405-0KA01-0AA0
S7-400 PS405 20A 24VDC
6ES7405-0RA00-0AA0
S7-400 PS405 4A 24VDC
6ES7405-0DA02-0AA0
6ES7405-0DA01-0AA0
6ES7405-0DA00-0AA0
S7-400 Rack
6ES7400-1JA01-0AA0
S7-400 Rack
6ES7400-1TA01-0AA0
6ES7400-1TA00-0AA0
S7-400 SM431 16AI U/I/Resist/Thermo/Pt100 isolated
6ES7431-7QH00-0AB0
S7-400 Terminator for IM461
6ES7461-0AA00-7AA0
S7-400 Terminator for Receiver IM461-1
6ES7461-1BA00-7AA0
S7-400 Terminator for Receiver IM461-3
6ES7461-3AA00-7AA0
S7-400H CPU 412-3H
6ES7412-3HJ14-0AB0
S7-400H CPU 414H
6ES7414-4HM14-0AB0
S7-400系列可編程控制器
6ES7400-0HR00-4AB0
6ES7400-0HR50-4AB0 6ES7400-1JA00-0AA0
6ES7400-1JA01-0AA0 6ES7400-1JA11-0AA0
6ES7400-1TA00-0AA0 6ES7400-1TA01-0AA0
6ES7400-1TA11-0AA0 6ES7400-2JA00-0AA0
6ES7400-2JA10-0AA0 6ES7401-1DA01-0AA0
6ES7401-2TA00-0AA0 6ES7401-2TA01-0AA0
6ES7403-1JA00-0AA0 6ES7403-1JA01-0AA0
6ES7403-1JA11-0AA0 6ES7403-1TA00-0AA0
6ES7403-1TA01-0AA0 6ES7403-1TA11-0AA0
6ES7405-0DA00-0AA0 6ES7405-0DA01-0AA0
6ES7405-0DA02-0AA0 6ES7405-0KA00-0AA0
6ES7405-0KA01-0AA0 6ES7405-0KA02-0AA0
6ES7405-0KR00-0AA0 6ES7405-0KR02-0AA0
6ES7405-0RA00-0AA0 6ES7405-0RA01-0AA0
6ES7405-0RA02-0AA0 6ES7407-0DA00-0AA0
6ES7407-0DA01-0AA0 6ES7407-0DA02-0AA0
6ES7407-0KA00-0AA0 6ES7407-0KA01-0AA0
6ES7407-0KA02-0AA0 6ES7407-0KR00-0AA0
6ES7407-0KR00-0AA0 6ES7407-0KR02-0AA0
6ES7407-0RA00-0AA0 6ES7407-0RA01-0AA0
6ES7407-0RA02-0AA0 6ES7408-0TA00-0AA0
6ES7408-1TA00-0XA0 6ES7408-1TA00-6AA0
6ES7408-1TA00-7AA0 6ES7408-1TA01-0XA0
6ES7408-1TB00-0XA0 6ES7408-1TX00-6XA0
6ES7408-1XX00-6XA0 6ES7412-1XF00-0AB0
6ES7412-1XF01-0AB0 6ES7412-1XF02-0AB0
6ES7412-1XF03-0AB0 6ES7412-1XF04-0AB0
6ES7412-1XJ05-0AB0 6ES7412-2XG00-0AB0
6ES7412-2XG04-0AB0 6ES7412-2XJ05-0AB0
6ES7412-3HJ14-0AB0 6ES7413-1XG00-0AB0
6ES7413-1XG01-0AB0 6ES7413-1XG02-0AB0
6ES7413-2XG00-0AB0 6ES7413-2XG01-0AB0
6ES7413-2XG02-0AB0 6ES7414-1XG00-0AB0
6ES7414-1XG01-0AB0 6ES7414-1XG02-0AB0
6ES7414-2AA00-4AB0 6ES7414-2XG00-0AB0
6ES7414-2XG01-0AB0 6ES7414-2XG02-0AB0
6ES7414-2XG03-0AB0 6ES7414-2XG04-0AB0
6ES7414-2XJ00-0AB0 6ES7414-2XJ01-0AB0
6ES7414-2XK05-0AB0 6ES7414-3EM05-0AB0
6ES7414-3XJ00-0AB0 6ES7414-3XJ04-0AB0
6ES7414-3XM05-0AB0 6ES7414-4HJ00-0AB0
6ES7414-4HJ04-0AB0 6ES7414-4HM14-0AB0
6ES7416-1XJ00-0AB0 6ES7416-1XJ01-0AB0
6ES7416-1XJ02-0AB0 6ES7416-2FK02-0AB0
6ES7416-2FK04-0AB0 6ES7416-2FN05-0AB0
6ES7416-2XK00-0AB0 6ES7416-2XK01-0AB0
6ES7416-2XK02-0AB0 6ES7416-2XK04-0AB0
6ES7416-2XL00-0AB0 6ES7416-2XL01-0AB0
6ES7416-2XN05-0AB0 6ES7416-3ER05-0AB0
6ES7416-3FR05-0AB0 6ES7416-3XL00-0AB0
6ES7416-3XL04-0AB0 6ES7416-3XR05-0AB0
6ES7417-4HL00-0AB0 6ES7417-4HL01-0AB0
6ES7417-4HL04-0AB0 6ES7417-4HT14-0AB0
6ES7417-4XL00-0AB0 6ES7417-4XL04-0AB0
6ES7417-4XT05-0AB0 6ES7421-1BL00-0AA0
6ES7421-1BL01-0AA0 6ES7421-1EL00-0AA0
6ES7421-1FH00-0AA0 6ES7421-1FH20-0AA0
6ES7421-5EH00-0AA0 6ES7421-7BH00-0AB0
6ES7421-7BH01-0AB0
6ES7400-1JA01-0AA0
6ES7400-1TA00-0AA0
6ES7400-1TA01-0AA0
6ES7400-2JA00-0AA0
6ES7401-1DA01-0AA0
6ES7401-2TA00-0AA0
6ES7401-2TA01-0AA0
6ES7403-1JA00-0AA0
6ES7403-1JA01-0AA0
6ES7403-1TA00-0AA0
6ES7403-1TA01-0AA0
6ES7405-0DA00-0AA0
6ES7405-0DA01-0AA0
6ES7405-0KA00-0AA0
6ES7405-0KA01-0AA0
6ES7405-0KA01-4JA0
6ES7405-0KA02-0AA0
6ES7405-0KR00-0AA0
6ES7405-0KR00-4JA0
6ES7405-0RA00-0AA0
6ES7405-0RA01-0AA0
6ES7405-0RA01-4JA0
6ES7407-0DA00-0AA0
6ES7407-0DA01-0AA0
6ES7407-0KA00-0AA0
6ES7407-0KA01-0AA0
6ES7407-0KA01-4JA0
6ES7407-0KR00-0AA0
6ES7407-0KR00-4JA0
6ES7407-0RA00-0AA0
6ES7407-0RA01-0AA0
6ES7407-0RA01-4JA0
6ES7408-0TA00-0AA0
6ES7408-1TA00-0XA0
6ES7408-1TA00-6AA0
6ES7408-1TA00-7AA0
6ES7408-1TA01-0XA0
6ES7408-1TB00-0XA0
6ES7408-1TX00-6XA0
6ES7408-1XX00-6XA0
6ES7412-1XF00-0AB0
6ES7412-1XF01-0AB0
6ES7412-1XF02-0AB0
6ES7412-1XF03-0AB0
6ES7412-1XF04-0AB0
6ES7412-2XG00-0AB0
6ES7412-2XG04-0AB0
6ES7413-1XG00-0AB0
6ES7413-1XG01-0AB0
6ES7413-1XG02-0AB0
6ES7413-2XG00-0AB0
6ES7413-2XG01-0AB0
6ES7413-2XG02-0AB0
6ES7414-1XG00-0AB0
6ES7414-1XG01-0AB0
6ES7414-1XG02-0AB0
6ES7414-2XG00-0AB0
6ES7414-2XG01-0AB0
6ES7414-2XG02-0AB0
6ES7414-2XG03-0AB0
6ES7414-2XG04-0AB0
6ES7414-2XJ00-0AB0
6ES7414-2XJ01-0AB0
6ES7414-3XJ00-0AB0
6ES7414-3XJ04-0AB0
6ES7414-4HJ00-0AB0
6ES7414-4HJ04-0AB0
6ES7416-1XJ00-0AB0
6ES7416-1XJ01-0AB0
6ES7416-1XJ02-0AB0
6ES7416-2FK02-0AB0
6ES7416-2FK04-0AB0
6ES7416-2XK00-0AB0
6ES7416-2XK01-0AB0
6ES7416-2XK02-0AB0
6ES7416-2XK04-0AB0
6ES7416-2XL00-0AB0
6ES7416-2XL01-0AB0
6ES7416-3XL00-0AB0
6ES7416-3XL04-0AB0
6ES7417-4HL00-0AB0
6ES7417-4HL01-0AB0
6ES7417-4HL04-0AB0
6ES7417-4XL00-0AB0
6ES7417-4XL04-0AB0
6ES7421-1BL01-0AA0
6ES7421-1EL00-0AA0
6ES7421-1FH00-0AA0
6ES7421-1FH20-0AA0
6ES7421-5EH00-0AA0
6ES7421-7BH01-0AB0
6ES7421-7DH00-0AB0
6ES7422-0XX00-7AA0
6ES7422-1BH11-0AA0
6ES7422-1BL00-0AA0
6ES7422-1FF00-0AA0
6ES7422-1FH00-0AA0
6ES7422-1HH00-0AA0
6ES7422-5EH00-0AB0
6ES7422-5EH10-0AB0
6ES7422-7BL00-0AB0
6ES7431-0HH00-0AB0
6ES7431-1KF00-0AB0
6ES7431-1KF10-0AB0
6ES7431-1KF20-0AB0
6ES7431-7KF00-0AB0
6ES7431-7KF00-6AA0
6ES7431-7KF10-0AB0
6ES7431-7QH00-0AB0
6ES7432-1HF00-0AB0
6ES7440-1CS00-0YE0
6ES7441-1AA03-0AE0
6ES7441-2AA00-8AA0
6ES7441-2AA00-8BA0
6ES7441-2AA00-8CA0
6ES7441-2AA00-8EA0
6ES7441-2AA03-0AE0
6ES7444-1MX00-0XE0
6ES7444-2AA00-8AA0
6ES7444-2AA00-8BA0
6ES7450-1AP00-0AE0
6ES7450-1AP00-8AG0
6ES7450-1AP00-8BG0
6ES7450-1AP00-8CG0
6ES7450-1AP00-8EG0
6ES7451-3AL00-0AE0
6ES7451-3AL00-8AG0
6ES7451-3AL00-8BG0
6ES7451-3AL00-8CG0
6ES7451-3AL00-8EG0
6ES7452-1AH00-0AE0
6ES7452-1AH00-8AG0
6ES7452-1AH00-8BG0
6ES7452-1AH00-8CG0
6ES7452-1AH00-8EG0
6ES7453-3AH00-0AE0
6ES7453-3AH00-8AG0
6ES7453-3AH00-8BG0
6ES7453-3AH00-8CG0
6ES7453-3AH00-8EG0
6ES7455-0VS00-0AE0
6ES7455-0VS00-8AA0
6ES7455-0VS00-8BA0
6ES7455-0VS00-8CA0
6ES7455-0VS00-8EA0
6ES7455-1VS00-0AE0
6ES7456-2AA00-0AB0
6ES7456-4EY00-0AE0
6ES7458-1XX00-6YB4
6ES7460-0AA00-0AB0
6ES7460-0AA01-0AB0
6ES7460-1BA00-0AB0
6ES7460-1BA01-0AB0
6ES7460-3AA00-0AB0
6ES7460-3AA01-0AB0
6ES7460-4AA01-0AB0
6ES7461-0AA00-0AA0
6ES7461-0AA00-7AA0
6ES7461-0AA01-0AA0
6ES7461-1BA00-0AA0
6ES7461-1BA00-7AA0
6ES7461-1BA01-0AA0
6ES7461-3AA00-0AA0
6ES7461-3AA00-7AA0
6ES7461-3AA01-0AA0
6ES7461-4AA00-7AA0
6ES7461-4AA01-0AA0
6ES7463-2AA00-0AA0
6ES7467-5FJ00-0AB0
6ES7467-5GJ00-0AB0
6ES7467-5GJ01-0AB0
6ES7467-5GJ02-0AB0
6ES7468-1AH50-0AA0
6ES7468-1BB50-0AA0
6ES7468-1BF00-0AA0
6ES7468-1CB00-0AA0
6ES7468-1CC50-0AA0
6ES7468-1CF00-0AA0
6ES7468-1DB00-0AA0
6ES7468-1DC50-0AA0
6ES7468-1DE50-0AA0
6ES7468-1DG00-0AA0
6ES7468-3AH50-0AA0
6ES7468-3BB50-0AA0
6ES7470-0AA00-0AA0
6ES7470-1AB00-0AA0
6ES7470-1AD00-0AA0
6ES7470-1VB10-0AA0
6ES7470-1VB30-0AA0
6ES7470-1VC10-0AA0
6ES7478-1AN00-0AA0
6ES7478-1AN10-0AA0
6ES7478-1AP00-0AA0
6ES7478-1AQ00-0AA0
6ES7478-1BM10-0AA0
6ES7478-2AC00-0AC0
6ES7478-2BA00-0AC0
6ES7478-2CA00-0AC0
6ES7478-2DA00-0AC0
6ES7478-2DA01-0AC0
6ES7478-2DA10-0AC0
6ES7478-2DX00-0AA0
6ES7486-3AA00-0AB0
6ES7488-3AA00-0AB0
6ES7488-4GY00-0AC0
6ES7488-5FY00-0AC0
6ES7490-0AA00-0AA0
6ES7490-0AB00-0AA0
6ES7490-1AA00-0AA0
6ES7490-1BA00-0AA0
6ES7492-1AL00-0AA0
6ES7492-1AL00-1AB0
6ES7492-1BL00-0AA0
6ES7492-1CL00-0AA0
6ES7492-1CL00-1AB0
6ES7492-1XL00-0AA0
6ES7492-2AX00-0AA0
6ES7492-2BX00-0AA0
6ES7492-2CX00-0AA0
6ES7492-2DX00-0AA0
6ES7492-2XL00-0AA0
6ES7492-2XX00-0AA0
6ES7498-8AA00-8AB0
6ES7498-8AA00-8BB0
6ES7901-3CB30-0XA0
6ES7901-3DB30-0XA0
6ES7972-0CA23-0XA0
6ES7972-0CA23-0XA0
6ES7972-0CB20-0XA0
6ES7972-0CB20-0XA0
6ES5734-1BD20
6ES7901-0BF00-0XA0
6ES7901-1BF00-0XA0
6ES7901-1BF00-0XA0
6ES7901-1BF00-0XA0
6ES7972-0BA41-0XA0
6ES7972-0BB41-0XA0
6ES7972-0BA12-0XA0
6ES7972-0BB12-0XA0
6ES7972-0BA52-0XA0
6ES7972-0BB52-0XA0
6RA8075-6DS22-0AA0 3
6RA8081-6DS22-0AA0 7
6RA8085-6DV62-0AA0 2
6RA8085-6DS22-0AA0 3
6RA8078-6DS22-0AA0 7
6RA8087-6DS22-0AA0 2
6RA8013-6DV62-0AA0 24
6RA8025-6DS22-0AA0 25
6RA8031-6DV62-0AA0 3
6RA8075-6DV62-0AA0 6
6SY7000-0AD50
Mitsubishi F1-20MR-ES