第五部分 控制软件编写实例
( a/ m$ r& H. ~. Y# V( E6 h2 O/ P0 }" H# D$ t e
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。, C& Z, | i2 q) l
1、开发环境
$ V" y) Z% i# v& Y0 n7 h 编译软件:Microsoft Visual Studio 2010
$ c. V1 P, c' h" V 基础框架:Microsoft .NetFramework 4.0
" K+ }6 [: l/ O& Q1 [; X6 V) D. _ 程序框架:Microsoft WPF$ y" R1 `+ o' R2 b: _5 N8 g
编程语言:C#
: E+ z, k+ k% a6 F/ A 2、实例功能
- u( U- o' H9 @2 q0 w ——播放功能0 ?2 N& N1 t6 l5 A$ O A8 X
——停止功能
G* m. e, w S- ^0 m) z2 ` ——快速前进功能% X- l4 P6 O: C& Y' j' }# D
——快速倒退功能
' _7 e: `, }0 @# ~$ E5 V9 _ ——录音功能
* \2 L" w- T- F7 ?' {+ M ——复位功能9 G6 V0 [* A3 w1 K8 K
——定位功能
6 M3 b p# ?$ B8 K 3、实例代码: C! q5 O$ V" o2 B
——在Visual Studio 2010中新建一个工程文件。: t. X5 I; M4 u F
——在工程文件中的窗体代码文件中添加IO端口的引用。
- t6 w" j4 T) w2 S7 c% { using System.IO.Ports;
' O; z2 F" x: j3 k9 _' w4 n ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
' Z d. e. f. y( E: i/ i! r4 o* }: f static SerialPort _serialPort;
- U( G' u! n& d( N ——双击窗体增加窗体装入事件处理方法
3 Y5 d. `& M* w4 Q5 d1 ] private void Window_Loaded(object sender, RoutedEventArgs e)* c7 y9 M$ i0 v \: o
{' m9 W- X3 M9 v; `/ a
}
! j& e) A5 j) i3 l2 C/ X 在窗体装入事件处理方法中写入端口初始化的代码。0 m& y e& R3 O% M
private void Window_Loaded(object sender, RoutedEventArgs e)
9 A/ X7 y) \- r, l {
6 d' H! d% x- @+ D6 U //创建一个新的串口对象实例' ?# j0 N( T# Z8 r
_serialPort = new SerialPort();
+ e: @2 `3 N% T5 @7 V$ e ~8 J+ p; M //枚举计算机中的串口& z: w3 [7 B8 d$ D. B* z3 E
string[] ports = SerialPort.GetPortNames();7 H& z- t7 y) d' n3 P- e; Q' y
//如果系统没有串口装置则退出
! V3 i& Y4 G" k# u2 @ if (ports == null)9 I- d9 ?) J E7 Z% `& \3 v+ I
{
/ z2 k; R4 }9 c9 x+ } this.close();3 R. Y4 J+ \9 l9 v2 b; m
}
9 o4 l. B+ r$ X7 b6 Z- W" Q3 Q, c try
- L) [0 a4 T8 X1 H5 m {
( S" c2 Y/ Z. C" l2 r7 R //使用系统的第一个串行端口) _& _" \6 t0 N8 n L
_serialPort.PortName = ports[0];; E: _! ]% z2 {4 _. A2 T. `0 ?
//设置为9600的速率* S& u, p2 q& u9 {; @5 k; G
_serialPort.BaudRate = 9600;
2 e8 F+ I; r0 D0 [; u( Y //设置为无校验
0 K3 A, y, ^% P- \! s% m" f i; _ _serialPort.Parity = Parity.None;/ `- S/ W0 ^$ g9 s- A; A
& p. R$ ^- b l$ v$ I# Q5 @' M; V4 B) P //设置为8位数据
/ s4 \- w* ~1 d& m _serialPort.DataBits = 8;, w) ?# n. G) c3 P3 Y1 r# V
//设置停止位为1
8 ]0 H9 F8 H% Z _serialPort.StopBits = StopBits.One;( W0 `2 I/ e9 S
//设置为无握手: K; R0 H Z& B
_serialPort.Handshake = Handshake.None;/ k& N8 q7 o9 o; \: H- \- ~# u) a
//设置读/写超时值& u* H' U: B. F7 B* ?- M
_serialPort.ReadTimeout = 500;
/ b" n( m: e0 Y2 Q3 N. H7 T9 \ _serialPort.WriteTimeout = 500;
* u+ G! _5 P: j //打开串行端口1 {1 U) j& w; [$ _
_serialPort.Open();
. X9 A& |* m% T( z+ {" f }/ p7 O( ]5 r6 H- P
catch (Exception ex)
) D$ R& s$ D9 _: Z {
$ a" `2 e# Y' A: C5 d: i Message.show(ex.Message);2 |) f; X5 V2 o& Z/ [# X
}
' i( O# F% Y5 z# s0 Q }( H& o4 P8 t0 n
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。8 L( d- r/ d! `+ I" W
按键命名 提示内容
7 U& |& j1 F# ~* ?. p( g" Z; X button_PLY 播放4 h: ^+ _3 W- Y4 [0 O! ]
button_STP 停止
1 v! V' h& V" r$ g8 \ button_FWD 快进3 _6 _: C* P3 s6 P V% H4 x
button_RWD 快倒
% Z; N, }/ V% k! H$ |( A* U& ~ button_RCE 播放! r. b, b# l3 y9 J$ M: o4 V. Y
button_RTM 清零
' a- I W" X* p7 j5 A2 F button_ZLO 定位到零
. ]( W. T! l$ s0 l ——双击按钮图标增加按钮处理方法(以录音为例)
7 ]2 F- ^) `4 C. r3 R) @ private void button_PLY_Click(object sender, RoutedEventArgs e)/ i0 c$ A! x8 F! Z* y8 a2 `4 ^
{
) j9 X7 W! ^5 U- f4 M/ H1 } try9 K! X! r4 o% n. w! f+ h
{* a* |; j+ E; i8 Z
//发送从输入信号直接输出方式控制字符串 g5 t3 X( w1 V' T- Y+ @/ v
_serialPort.WriteLine("INP F ");
9 G5 J# R; Q* ^* [% ? 1 `7 {- f/ U r' n
//休止100ms9 r* B1 h9 {; }* q5 W' i
Thread.Sleep(100);
0 h/ b/ W K$ w+ J' z2 `+ F //发送所有通道Ready的控制字符串0 I+ Y, M: g" a& K1 q# M
_serialPort.WriteLine("REA F ");
7 O7 U3 \/ B7 K+ o Thread.Sleep(100);
/ a3 k% ~: R) }6 \9 q: k5 F. B //发送开始录音的控制字符串。' e- e4 H; ?7 {. `
_serialPort.WriteLine("REC ");! c$ D' n9 E" }
}6 I9 V4 {7 n/ }- [5 h6 {) E
catch (Exception ex)
6 W6 r7 {4 F/ C {$ A, @ S& e2 L5 v
Message.show(ex.Message);
/ E9 s: i3 w2 M: e& U6 V6 i. ^ }/ X% j* c; c7 P( D4 n6 f9 t
}, y' s' [. T& ^$ x# p) m3 J
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
" w" d N- M# q9 F% r- i! q 按以上方法增加相应按键的处理方法,并发送对应的指令即可。9 x1 j: ? f9 h8 k9 N' @3 Z7 k# a
播放控制字符串:PLY+空格+回车
& J! Y' \8 ^7 n* A" M% Q 停止控制字符串:STP+空格+回车
- B% C V9 x% @, ?+ l+ b 快进控制字符串:FWD+空格+回车- v2 l6 Q! f' `. Q6 u# q3 h; n" f) r1 u& ^
快倒控制字符串:RWD+空格+回车
1 M" j3 G" A# B! F 复位控制字符串:RTM+空格+回车
3 J' Q0 Y e. m& C" N- `* @, s 定位到零字符串:LZA+空格+回车
0 X' o% a' F& D! N* u7 H0 m# t. r % B8 r; y" l% l" E# e- y
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}( c, ^! U" J) L
8 d* _5 J7 x' |$ D/ w
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。; s7 }; J1 Q; V. s9 p' K
|