рдЖрдЗрдП рд╣рдо рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реИред
рдФрджреНрдпреЛрдЧрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрдИ рд╕реНрддрд░ рд╣реЛрддреЗ рд╣реИрдВ:
- рд╕реЗрдВрд╕рд░ рд╕реНрддрд░
- рдирд┐рдпрдВрддреНрд░рдг рд╕реНрддрд░ (рдкреАрдПрд▓рд╕реА, рдХрдВрдкреНрдпреВрдЯрд░)
- рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрддрд░ / SCADA
рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдПрд╕реАрдПрд╕ рд╕реНрддрд░ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдСрдкрд░реЗрдЯрд░ рдкреИрдирд▓ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо (рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди, рд╕реНрдерд┐рддрд┐ рдмрд┐рдЯреНрд╕ (рдСрди-рдСрдл), рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЧреНрд░рд╛рдл) рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдЬрд╛рдирдХрд╛рд░реА (Win Forms, WPF, SilverLight) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рдХрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕реНрддрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣рд╛рдВ, рдЖрд╡рд╢реНрдпрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╕реНрддреБ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ: рдпрджрд┐ рдЖрдк рдПрдХ рдХрдареЛрд░ рд╕рдордп рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рдЗрдВрдЬрди рдХреЛ рдмрд╕ рдПрдХ рдПрд▓рдИрдбреА рдпрд╛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдУрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕реЗ рдУрдПрд╕ рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп, рдЕрд░реНрдерд╛рддред рдПрдХ рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рдорд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ "рдбреЗрд╕реНрдХрдЯреЙрдк" рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ .Net рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕ рдЧрддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдПрдБ рд╣реЛрдВрдЧреА:
- рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдУрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ
- рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗрд╡рд╛рдПрдВ
- .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░
- рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
рд╣рдо рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: FTDI рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдВрдбреЛрдЬ XP + USB-COM рдПрдбрд╛рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрд╕реА рд╣реИред рдХрд┐рд╕ рдЧрддрд┐ рдкрд░ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рдЖрд░рдЯреАрдПрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рдореЗрдпрд░ (рдкрд▓реНрд╕ рд░рд┐рдкреАрдЯреАрд╢рди рдЕрд╡рдзрд┐ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛) рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ? рдкреАрд╕реА рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЛрдб рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдХрд╛рдо рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рдВрдбреЛрдЬ рдЯрд╛рд╕реНрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рдереНрдпреЛрд░реА рдХрд╛ рдПрдХ рд╕рд╛
рдХреБрд▓ 32 рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ рд╣реИрдВ:
- 0 рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ "рд╢реВрдиреНрдп рдкреГрд╖реНрда рдереНрд░реЗрдб"
- 1-15 рдЪрд░ рд╕реНрддрд░
- 16-31 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реНрддрд░
рдмрджрд▓рддреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдирд┐рд╖реНрдХреНрд░рд┐рдп (2-6)
- рдиреАрдЪреЗ рд╕рд╛рдорд╛рдиреНрдп (4-8)
- рд╕рд╛рдорд╛рдиреНрдп (6-10)
- рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдКрдкрд░ (8-12)
- рдЙрдЪреНрдЪ (11-15)
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп (22-26)
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (CreateProcess ()) рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд░реНрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп (рд╕реНрддрд░ 8) рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдзрд╛рдЧрд╛ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзрд╛рд░рд╛ рдХреА рдЕрдВрддрд┐рдо, рдмреБрдирд┐рдпрд╛рджреА, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреА рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдпреЛрдЬрди рдФрд░ рдзрд╛рд░рд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдереНрд░реЗрдб рдХреА рдореВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ (рд╕реНрддрд░ 16-31) рдХреЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╢реЗрдбреНрдпреВрд▓рд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдФрд░ рдШрдЯрдирд╛рдУрдВ (рдпреВрдЖрдИ, рдЖрдИ / рдУ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП 10ms рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдорд▓реНрдЯреАрдкреНрд░реЗрд╕рд░ рд╣реЛрдиреЗ рдкрд░ 15ms рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд╡рд╛рдВрдЯрдо рдУрдПрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ (рдирд┐рдпрдорд┐рдд рдпрд╛ рд╕рд░реНрд╡рд░ ("рд▓рдВрдмреА рдХреНрд╡рд╛рдВрдЯрд╛" рд╕рд░реНрд╡рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ (рдпреВрдЖрдИ рдереНрд░реЗрдб рдФрд░ рдереНрд░реЗрдб рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЬрдм рдЗрд╕реА рддрд░рд╣ рдХреА рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ)ред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо "рд╕рдмрд╕реЗ рдХрдард┐рди" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд░реНрдЧ рдФрд░ рдЙрдЪреНрдЪрддрдо рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдЗрд╕ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдереНрд░реЗрдб рдХрд╛ рдореВрд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ 24 рд╣реИред рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реНрддрд░ рдкрд░, рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЛ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреНрдп рдереНрд░реЗрдб рдирд╣реАрдВ рд╣реИрдВ)ред
рдХрд╛рд░реНрдпрдХреНрд░рдо
using System;
using System.Collections. Generic ;
using System.Diagnostics;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;
using FTD2XX_NET;
private bool _exitThread;
private Thread _workThreadPort, _workThreadPortUnmanaged, _workThreadDriver;
private List < long > _durationsPort, _durationsPortUnmanaged, _durationsDriver;
public FormMain()
{
InitializeComponent();
//System.Diagnostics.Process.GetCurrentProcess().PriorityClass =
// ProcessPriorityClass.RealTime;
// SerialPort
_workThreadPort= new Thread(()=>
{
SerialPort port = new SerialPort( "COM5" );
port.BaudRate = 115200;
port.StopBits = StopBits.One;
port.Parity = Parity.None;
port.DataBits = 7;
port.Handshake = Handshake.None;
port.Open();
bool flag= false ;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//Thread.CurrentThread.Priority = ThreadPriority.Highest;
while (!_exitThread)
{
_durationsPort.Add(stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();
port.RtsEnable = flag;
flag = !flag;
}
port.Close();
});
// (Win API)
_workThreadPortUnmanaged = new Thread(() =>
{
UnmanagedSerialPort unmanagedSerialPort = new UnmanagedSerialPort( "COM5" );
unmanagedSerialPort.Open();
bool flag= false ;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//Thread.CurrentThread.Priority = ThreadPriority.Highest;
while (!_exitThread)
{
_durationsPortUnmanaged.Add(stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();
if (flag)
{
unmanagedSerialPort.On();
}
else
{
unmanagedSerialPort.Off();
}
flag = !flag;
}
unmanagedSerialPort.Close();
});
// API FTDI
_workThreadDriver= new Thread(()=>
{
FTDI myFtdiDevice = new FTDI();
myFtdiDevice.OpenByIndex(0);
bool flag= false ;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//Thread.CurrentThread.Priority = ThreadPriority.Highest;
while (!_exitThread)
{
FTDI.FT_STATUS ftStatus = myFtdiDevice.SetRTS(flag);
if (ftStatus == FTDI.FT_STATUS.FT_OK)
{
flag = !flag;
_durationsDriver.Add(stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();
}
}
myFtdiDevice.Close();
});
_durationsDriver = new List < long >();
_durationsPort = new List < long >();
_durationsPortUnmanaged = new List < long >();
}
//
private void b_Save_Click( object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter( "Port.csv" );
_durationsPort.ForEach(l => sw.WriteLine(l));
sw.Close();
sw = new StreamWriter( "Driver.csv" );
_durationsDriver.ForEach(l => sw.WriteLine(l));
sw.Close();
sw = new StreamWriter( "PortUnmanaged.csv" );
_durationsPortUnmanaged.ForEach(l => sw.WriteLine(l));
sw.Close();
}
private void b_RunViaPort_Click( object sender, EventArgs e)
{
_exitThread = false ;
_workThreadPort.Start();
}
private void b_Stop_Click( object sender, EventArgs e)
{
_exitThread = true ;
}
private void b_RunViaPortUnmanaged_Click( object sender, EventArgs e)
{
_exitThread = false ;
_workThreadPortUnmanaged.Start();
}
private void b_RunViaDriver_Click( object sender, EventArgs e)
{
_exitThread = false ;
_workThreadDriver.Start();
}
* This source code was highlighted with Source Code Highlighter .
рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ 3 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рд╡рд░реНрдЧ SerialPort
- рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб (Win API: GetCommState, EscapeCommFunction, SetCommState)
- рдкреБрд╕реНрддрдХрд╛рд▓рдп FTDI рджреНрд╡рд╛рд░рд╛ рдЖрдкреВрд░реНрддрд┐ рдХреА
рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЪрдХреНрд░ рдХреЗ рд╕рдордп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реБрдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрдХреНрд░ рдореЗрдВ рдЖрд░рдЯреАрдПрд╕ рдкрд┐рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордп рдЙрд╕ рд╕рдордп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд┐рди рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реНрдерд┐рддрд┐: рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ 30 рдПрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, 10 рдПрд╕ рдХреЗ рдмрд╛рдж рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ 10 рдПрд╕ (рд╡рд┐рдирд░рд╛рд░ - рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рд╕реНрдЯреНрд░реАрдо (рдмреНрд▓реВ рдЧреНрд░рд╛рдл) рдХреА рд╕рд╛рдорд╛рдиреНрдп (рд╕реНрддрд░ 8) рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп (рд╕реНрддрд░ 24, рд▓рд╛рд▓ рдЧреНрд░рд╛рдл) рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдХреНрд▓рд╛рд╕ рдХрд╛ рд╕реАрд░рд┐рдпрд▓рдкреЛрд░реНрдЯ

рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдФрд░ FTDI рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдЧреНрд░рд╛рдлрд╝ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдорд╛рдирдХ рд╕реАрд░рд┐рдпрд▓рдкреЛрд░реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "рдЧреИрд░-рдорд╛рдирдХ" рд╕рдорд╛рдзрд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЪрдХреНрд░ рд╕рдордп рд▓рдЧрднрдЧ 5 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдзрд╛рд░рд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдврд╝рдиреЗ рд╕реЗ рдПрдХ рдЪрдХреНрд░ рдХрд╛ рд╕рдордп 2ms рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕реА рдзрд╛рд░рд╛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬрдм рдПрдХ рдкреНрд░рдмрдВрдзрд┐рдд .net рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрд╕реА рд╕реЗ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп 1-2ms рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреНрд░рд╡рд╛рд╣ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдХрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЙрд╕реА рд╕рдордп, рдХрд┐рд╕реА рдХреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрдн (рдереНрд░реЗрдб рд╕реЛрд▓реЗрдк (0)) рдХреЛ рдЕрдиреНрдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдереНрд░реЗрдбреНрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХрд╕рдВрдЧрдд рдХрд╛рдо рдХрд░рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ (рдЬреАрд╕реА) рдХреЙрд▓ рд╕реЗ рдмрдЪреЗрдВ, рд╕рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдкрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реЗрдЯрдЯреНрд░реЗрдбрдПрдлрд╝рд┐рдирд┐рдЯреАрдореИрд╕реНрдХ () рджреЗрдЦреЗрдВ)ред
рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреВрд╕рд░реА рдмрд╛рдЗрдХ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдк рддрдХрдиреАрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдПрд▓рд╕реА рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ .NET рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп 2-15ms рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рдореИрдВ рдЬрд╛рд╡рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж рдЕрдЧрд▓реЗ рдПрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ .NET рдЖрд░рдЯреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╕рд╛рде рд╣реА рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрдкрдирд┐рдпреЛрдВ (рд╕реАрдореЗрдВрд╕, рдУрдорд░реЙрди) рдХреА рдкреАрдПрд▓рд╕реА рдкрд░ .NET рдорд╛рдЗрдХреНрд░реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдФрджреНрдпреЛрдЧрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧред
Update1
рд╕рдВрджрд░реНрдн
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реА # - рдПрдХ рд▓реЗрдЦ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛
рд░реАрдпрд▓-рдЯрд╛рдЗрдо .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ - рдпрд╣ рдЖрд▓реЗрдЦ рдЬрд╛рд╡рд╛ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдХреА рддреБрд▓рдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ .NET RT рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЬреАрд╕реА - рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
Thread.Sleep (0) рдФрд░ Thread.Sleep (1) рдХреА рддреБрд▓рдирд╛: рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ - Frozik рдФрд░ tangro рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж