第五部分 控制软件编写实例% V1 p6 ~9 i8 n# n4 H; |
5 w1 e5 w1 S8 W+ L( T6 z- i
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。8 D8 b( i5 q4 \$ I) k, Z: j4 Q
1、开发环境
( Q, V9 x& |/ f0 ?0 x9 m 编译软件:Microsoft Visual Studio 2010+ Q9 `5 n$ {. c- h0 N
基础框架:Microsoft .NetFramework 4.0
) Z8 t/ o0 F; v2 N 程序框架:Microsoft WPF
* w4 F% W4 A- T( L0 w: H1 | 编程语言:C#. J+ V U1 T8 }! O; B2 g
2、实例功能
: t F% @* w2 F: Q, q* @$ c ——播放功能
6 u6 S5 O* q6 h; A ——停止功能7 S1 Z' s: p: {5 U' ]% n. |/ Z
——快速前进功能! F0 Z( r u) i. t8 A$ r h* C
——快速倒退功能
5 p+ @2 V) @8 x6 s7 A ——录音功能 C* ~3 j) Q( p: P% ?! V# h( J: a4 s
——复位功能
4 U( p+ ?; ^! [2 ~0 v+ q ——定位功能3 k( ~7 r- j( ~ j3 a
3、实例代码
7 J% G5 \; Y+ i) `' F; u5 x ——在Visual Studio 2010中新建一个工程文件。
& ~9 N8 ^4 |7 r& O* W6 } ——在工程文件中的窗体代码文件中添加IO端口的引用。
0 }$ a& Y ^3 Q using System.IO.Ports;# x( A) g8 h* P5 N, N6 d
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
& `2 ]+ Z3 ~, v; f5 D static SerialPort _serialPort;" L" ` ]1 r" U& Z/ q4 U1 k" }: d
——双击窗体增加窗体装入事件处理方法
. i3 b' m/ q( F2 t; o4 I2 k private void Window_Loaded(object sender, RoutedEventArgs e)% _5 \2 d8 p& H) C# b
{
# U$ Y, N7 z" w7 ^4 W1 z n4 ^! v e! |5 t } D+ A$ ~$ P# t6 d
在窗体装入事件处理方法中写入端口初始化的代码。( z5 W/ o4 y2 W W+ [
private void Window_Loaded(object sender, RoutedEventArgs e)9 }, X7 T# K: b: [ h
{ a" C! N& A/ M! R5 ~! J6 i
//创建一个新的串口对象实例
/ U) r6 i( k( r" t _serialPort = new SerialPort();, f! A4 r9 y+ g" b1 G
//枚举计算机中的串口) R* I& d2 \( z" v, z7 @
string[] ports = SerialPort.GetPortNames();
s3 C$ g' w- D1 t u) i% W8 M, Q //如果系统没有串口装置则退出
4 _3 N7 z! E! x6 I/ E9 j5 R if (ports == null)
9 M) S. E, a" i; R {3 x; C j8 \* R9 `1 H+ w/ v: W* t
this.close();
( Y* L* Z( B- v' K, D/ C8 P }
$ M# V7 U* U; W1 s) z try
( x$ n3 M4 \; W1 L0 X" `, y: V& Y) f {
" b0 t: p' f3 \8 D* y( Q0 ` //使用系统的第一个串行端口6 ?$ U" \. [8 `; T" G& \% p
_serialPort.PortName = ports[0];+ a0 [* c+ |; ^# X0 k2 v
//设置为9600的速率1 r8 @. \' Z; S, ~& x+ r
_serialPort.BaudRate = 9600;. {& H$ h" y2 ^8 U0 Z9 y' `" l
//设置为无校验. z/ S' z6 V) i' I+ j- v2 G
_serialPort.Parity = Parity.None;
3 d/ A2 H+ a( U+ d , h3 n* c! d4 ]! K1 P
//设置为8位数据- u# r% }+ h% X/ n+ T* O
_serialPort.DataBits = 8;( i" \; ?4 @: Q$ T
//设置停止位为1
/ `* B2 E3 j7 G# P* w _serialPort.StopBits = StopBits.One;/ ~% V5 i& ~9 o' k. d: J% F }' z
//设置为无握手7 x( }6 V. M5 n6 w0 R
_serialPort.Handshake = Handshake.None;
8 Y" A, _# ?1 N //设置读/写超时值
: ]; M0 t! Z" h/ u8 v# Y( q _serialPort.ReadTimeout = 500;$ I: [; Z! `/ v3 x' O5 M# u% \* O' v
_serialPort.WriteTimeout = 500;
5 B4 ?5 K" J* K Z, P" g$ y) {( J+ d //打开串行端口
0 v- E, }4 N+ o' R9 x _serialPort.Open();
7 z5 G5 K% I: w2 W. f) R }
8 a6 x# A- ^2 n, x, n4 D catch (Exception ex)6 r$ x% Y8 u' F9 }
{: d$ Q* W% N: h1 L* i
Message.show(ex.Message);0 {" i5 g: L6 }5 ~ [
}
: k& @8 m5 _- l. k }
) y9 U$ v% l9 ? }/ P ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
$ Z; \7 V" L3 u* B3 r 按键命名 提示内容, f) U5 g8 j9 o% s
button_PLY 播放, W8 @4 h- B+ x
button_STP 停止! Q% _: P, U2 j' |8 I3 E
button_FWD 快进
8 T7 J8 g7 r9 O0 D5 o button_RWD 快倒
7 r4 x; Y, h" W: f- N9 s/ ~ button_RCE 播放
4 C% m7 a2 k5 Z9 A& v button_RTM 清零/ C; H! h/ q# k+ N& T. J4 u
button_ZLO 定位到零
- V- H. X2 l+ b ——双击按钮图标增加按钮处理方法(以录音为例)
1 d) K y7 f7 b& ^& d( V3 i% P; ^% ~0 J private void button_PLY_Click(object sender, RoutedEventArgs e)/ Z- l' b" h& y2 L6 W$ z, [6 P
{
) P& \( S4 t$ A try! v( w2 }( c/ V3 b& a' v a
{+ R9 b8 K: z0 N \8 v
//发送从输入信号直接输出方式控制字符串; M8 \+ G. P2 R+ D) j! c# F9 p
_serialPort.WriteLine("INP F ");% C' {: y( r, w- O7 ^& L
& }0 T0 x2 @* k+ K( } J7 H
//休止100ms
: _- f: }, B; j; h$ c% S Thread.Sleep(100);
, b+ L; V8 k( k; Z9 @+ k+ l; p //发送所有通道Ready的控制字符串
* q' \, P2 }7 g9 b$ q, c _serialPort.WriteLine("REA F ");
4 |6 Z: W% a$ q# D6 B/ E Thread.Sleep(100);) J7 W) v, }4 G/ j
//发送开始录音的控制字符串。1 J) X& z( R* }" j, a: h
_serialPort.WriteLine("REC ");5 A6 Z# ~9 b) ] r2 m; H5 Q
}. T a. a- \' {8 l
catch (Exception ex)
, g+ b' y8 w$ |* @ {
6 n* |2 N4 P5 r1 k9 b! @- s Message.show(ex.Message);4 m; y2 f3 n2 i8 G
}- F5 ^( n/ h$ s" X; w% Z7 L: Y5 c
}2 k: L2 E9 _- Q2 T! E/ a
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。0 O) Q, ]7 m! o4 ~1 T! d
按以上方法增加相应按键的处理方法,并发送对应的指令即可。6 Q$ I2 l! a" r/ p$ C/ u
播放控制字符串:PLY+空格+回车: l: _/ s9 O8 U0 {7 q& q8 \
停止控制字符串:STP+空格+回车2 I6 E. @1 K; L l0 R
快进控制字符串:FWD+空格+回车
5 q6 Y" f" q) L 快倒控制字符串:RWD+空格+回车" n1 Q! r# K* H9 G: ~4 O) m
复位控制字符串:RTM+空格+回车& y$ R8 @) q$ _6 A1 j2 |
定位到零字符串:LZA+空格+回车
1 a9 @+ x" _( ?9 n q7 U( w
6 F7 E. G% `5 p2 u$ ]) z" E 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}; W6 E% k! R' @, R# f6 `& V( S' [
" d Q- y) A3 |' [& Z- h- K
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
8 Y H7 s7 k5 _9 } |