第五部分 控制软件编写实例5 G Q5 t& C' ~
) T1 f- Z: k# e; A) g6 Y0 P" \/ ~
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
; W/ X4 }9 y. q! @, A. f6 J 1、开发环境& g4 p* k& t6 Y% r! i) ^; a( D
编译软件:Microsoft Visual Studio 2010* s9 t6 p7 U& D5 Y9 r
基础框架:Microsoft .NetFramework 4.0
. ]& T9 h' _; l 程序框架:Microsoft WPF2 h" x) i( D! f/ f0 M
编程语言:C#& [$ @8 h- x; M& W# L* T
2、实例功能# K: t4 v$ m1 j l4 ]0 z9 {
——播放功能% y# z. j% W1 m/ p6 Z
——停止功能
" r z) u/ o: U' d) v" G; G ——快速前进功能
( `( W+ {7 B+ L9 G ——快速倒退功能
1 x) V2 J/ n+ n- ]& l% G! M ——录音功能4 u! a) w7 `1 d8 k6 V7 o( q
——复位功能* D) h! N0 F. T: c
——定位功能1 V4 E, U) W- p- R5 a2 _. Z
3、实例代码- B4 E1 _, q& U4 D
——在Visual Studio 2010中新建一个工程文件。1 ^8 R+ G. o' E7 [# s( J* B
——在工程文件中的窗体代码文件中添加IO端口的引用。, k2 ~9 ~+ n; L% p3 O( O8 h [
using System.IO.Ports;$ e$ }9 D# M- g+ z z6 s
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。: }; d* J# \ j4 {! X
static SerialPort _serialPort;! f/ `. V. Q- U4 L. l
——双击窗体增加窗体装入事件处理方法( \, L# K9 K S6 g
private void Window_Loaded(object sender, RoutedEventArgs e)
/ _" X. Y7 W9 d' E1 M- h/ Q; l/ { {* @, n1 n4 v9 j. u* _3 u
}& `. X+ X7 q/ f7 r2 r) m5 R; Z
在窗体装入事件处理方法中写入端口初始化的代码。; \# X3 o h& ^7 P
private void Window_Loaded(object sender, RoutedEventArgs e)
# m9 t* s( T+ T, x4 ` {+ d/ d4 M' H( | K* Q
//创建一个新的串口对象实例
; e/ F, l% D# j& y% n, w' N- F _serialPort = new SerialPort();
4 \3 l, b, y J //枚举计算机中的串口 o5 Y" Q' k/ \/ a, q
string[] ports = SerialPort.GetPortNames();
7 u* E/ ?& m; f) H% n //如果系统没有串口装置则退出
4 W8 e+ b4 r6 ^7 m0 [- Z if (ports == null)
1 E5 ^4 l0 Q8 A8 M: w+ t {
* h# J; V7 a' G this.close();4 _+ d2 _$ x' b! D
}
2 z$ L$ _: E# r9 G0 {. @ M try& }7 v) J" ~! l5 Y; s/ Y- F
{. s) r4 ?. A2 w, {: J5 j5 h
//使用系统的第一个串行端口& W4 q# J) r( }: I: i/ P+ T7 G
_serialPort.PortName = ports[0];
+ e9 j$ O) F! [/ ? Q, }. Z2 t8 t //设置为9600的速率
8 G) x6 g; J- y9 N$ U _serialPort.BaudRate = 9600;
# @& U. y. |$ E7 x* A( C //设置为无校验
+ E1 n# a( r% D y/ w1 h5 i8 U _serialPort.Parity = Parity.None;7 B- c' X6 {4 G; T/ F
# ~, c* X) [5 }$ s5 [+ X/ N
//设置为8位数据
: ^7 A D+ y) C# Y5 E _serialPort.DataBits = 8;
; \. {) f( c) s. c5 B //设置停止位为1% S8 }+ Y1 U& @7 C! }
_serialPort.StopBits = StopBits.One;8 N5 ~* m* L3 w& o+ @
//设置为无握手
- d* }5 s' _0 a. D" P$ M/ K _serialPort.Handshake = Handshake.None;" j- z+ | l" j, l$ e$ Q# ?! a
//设置读/写超时值* e. T/ F8 J# B0 W/ J
_serialPort.ReadTimeout = 500;
1 L$ [" S6 u# X- V. I _serialPort.WriteTimeout = 500;
& @( W" D2 T( r" E! B, ^ //打开串行端口* H/ h3 o9 K6 I1 ^2 N
_serialPort.Open();8 o3 i1 D" x- b9 i) w6 `3 r/ j! L
}
! Z# I/ A5 X D" I catch (Exception ex)
$ v3 a- L4 r9 H9 m/ ` {$ I2 f* ~: s4 Q' ^9 R: X8 t4 t
Message.show(ex.Message);
& O: ~, P: ?: I0 ]7 k }
9 O4 ]9 k0 e; W( h& M" U4 M }! r$ @/ w& c/ l
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
2 L; R! O% n+ ` 按键命名 提示内容
' T2 c# J3 s6 M+ L button_PLY 播放) |& c. d8 A+ a5 Y. y; l+ i( w
button_STP 停止
9 ]6 a) h F2 ?1 [* i button_FWD 快进
: ~4 D: T+ D" W2 O) v# I2 Z button_RWD 快倒9 Q. L) M8 ?# f) [3 Q9 G+ h
button_RCE 播放
5 L9 ^5 }+ N( {5 g' W2 H button_RTM 清零 P! H4 p- n% U# Q, s% A b* n. l
button_ZLO 定位到零: S# |7 j, X- ?/ y3 ^
——双击按钮图标增加按钮处理方法(以录音为例)
. T w( ~" F! Y, l private void button_PLY_Click(object sender, RoutedEventArgs e)
/ P4 r+ _* x5 Q& r( C; A2 L2 y { R( b/ W$ ?" \- ]5 M Y
try
( o$ k1 `' l# \* ~* `6 S {
( _) Z; K L' @! F* c* K& x/ u0 Z //发送从输入信号直接输出方式控制字符串 z: ]5 |: K& c( \: g7 E% I0 N
_serialPort.WriteLine("INP F ");* L' H# N3 t8 r* c6 b
T, l9 W( @9 U0 @, q! s
//休止100ms5 r" D% S- s& j
Thread.Sleep(100);. B- n( i, b+ E" ]+ G- x
//发送所有通道Ready的控制字符串
( Y( }' C$ u* Q/ d D! C0 J _serialPort.WriteLine("REA F "); ! z5 s7 f$ f3 f! a- f; i7 a" j2 \
Thread.Sleep(100);4 S- R3 u, P. j7 m& a, F+ a
//发送开始录音的控制字符串。4 c3 C( o" X2 g" T( l+ X' H8 W# w
_serialPort.WriteLine("REC ");
@( l# }: |8 s: R$ u' q }! m, H* ^* G$ q3 b* ]- N
catch (Exception ex)7 h# A3 J1 E# o
{3 w" A; U7 j V8 A; U- I
Message.show(ex.Message);1 C" C) s$ U/ h% I$ C$ [) [* I5 Z
}2 h a" s8 d9 l \& Z
}4 I U, a6 Y$ Z$ i* l- C5 E( K
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。, s& T! ]1 H5 e
按以上方法增加相应按键的处理方法,并发送对应的指令即可。9 y! {! R" k% P5 `& Z) s* @1 z7 o. r7 d
播放控制字符串:PLY+空格+回车
/ C1 a, b7 _* y: q 停止控制字符串:STP+空格+回车8 d0 v7 X: J- [! [+ ~
快进控制字符串:FWD+空格+回车
# U: d3 C }2 o* S' s" w& v+ } 快倒控制字符串:RWD+空格+回车$ F E# R- U. X+ J4 o/ q
复位控制字符串:RTM+空格+回车0 k; l2 G- _0 k$ l4 V* n
定位到零字符串:LZA+空格+回车: I8 ^" o- [: F: ?8 }
' x( T; _( N0 T& g; @6 C' Z
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
0 S3 H5 N+ a0 e! K |1 V" ~ 3 Y. r6 g3 K" A5 ]$ P1 G% t5 w
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
# X9 V- ^" o/ o2 |7 l) @ |