第五部分 控制软件编写实例
2 W+ z" n2 d3 _5 x7 [
% ~0 C" w8 Q: _( E2 _ 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
& R: o! s3 Y: t8 e% Y 1、开发环境
+ l6 \( X% S/ [% E4 Y( g4 K0 v 编译软件:Microsoft Visual Studio 2010
% p. \8 u& G/ p2 e [8 s 基础框架:Microsoft .NetFramework 4.0
# R, k+ w4 \+ Y+ c6 U2 k% v, b8 n: N9 Z 程序框架:Microsoft WPF- a6 o' b& i) ]
编程语言:C#
8 J2 U4 w4 z0 Y- ~% x4 d5 F2 i 2、实例功能/ H5 h r% z+ c: h8 [( V
——播放功能
+ H. X4 X: { Z" r ——停止功能
2 x. _, i4 A. N2 P# ]" d ——快速前进功能9 n3 l8 F+ d: T2 w0 T4 N' Z
——快速倒退功能7 c( }) e+ M8 q' B
——录音功能
6 i8 W' U7 h/ Q+ Q; f6 f6 @ ——复位功能2 `$ @8 j7 E h' S/ y8 Z( \" c
——定位功能7 ?4 X# p- t$ T9 w
3、实例代码, O: [; |- J, N( }6 \% D
——在Visual Studio 2010中新建一个工程文件。
/ h& y& R3 [5 Q0 m9 B. J1 \- \ ——在工程文件中的窗体代码文件中添加IO端口的引用。
4 Z" h1 Q$ _6 [ using System.IO.Ports;
: Q7 P4 U' s$ a& H" }$ \# Z ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
5 T% s+ ~; w; u+ Z( R# Y static SerialPort _serialPort;: y+ e3 ?4 I0 C% {. G- G5 O$ r7 p7 R
——双击窗体增加窗体装入事件处理方法
$ H8 W, o/ x& [ private void Window_Loaded(object sender, RoutedEventArgs e)5 X1 M" _" L. I* D( T: o! M6 T
{: A, Q! [5 Y) H r4 g4 l( U; J
}9 c. _: a1 S7 L+ k7 H# u
在窗体装入事件处理方法中写入端口初始化的代码。
& ^0 ?$ u& U M+ D0 u) M private void Window_Loaded(object sender, RoutedEventArgs e)
7 P% I9 [4 q S% ^+ {. } {
4 P9 I" j: @8 B //创建一个新的串口对象实例3 ?6 e0 M0 U/ t5 D/ B9 G( ?
_serialPort = new SerialPort();
3 |# C: {' L: \ //枚举计算机中的串口( i9 b; ]# }- k5 _( e5 a+ W2 m
string[] ports = SerialPort.GetPortNames();
* `9 J! w( o! T+ e3 ^; \; \, W //如果系统没有串口装置则退出+ R, y& n) E$ o0 p8 R2 e8 C
if (ports == null)
B/ ~( G- Z& O# h {
: {2 p! E4 W" s7 K+ j! q! Q; P X o this.close();: C3 n8 v; l9 r9 O# q! N. O
}( G' |1 W7 }) @: z6 Q; w' J
try, m4 [6 _! Y6 o1 X- i3 q
{
( K8 c& k: S, `( m! Y //使用系统的第一个串行端口 V' z" t# A- R# z' }
_serialPort.PortName = ports[0];
( i1 B# W% l+ {& y4 \: z) x! u //设置为9600的速率
! \ [' o0 p a2 H. D2 X _serialPort.BaudRate = 9600;
. \( P4 y" a7 F& x- _ //设置为无校验
+ z! Y6 P. t4 z, P" B% s6 l3 s9 T _serialPort.Parity = Parity.None;" ?7 C( u; p9 o) L
3 z4 g% g( A. v$ q( D" q4 F
//设置为8位数据
) u9 N0 c) ?" Z9 b) |: a# C _serialPort.DataBits = 8;! m c* h f# N: ?, Q8 h- T
//设置停止位为1
) j8 M, `& l, \& \ _serialPort.StopBits = StopBits.One;% N. {% S' p& S) q; P7 S% |* `2 s
//设置为无握手
( k% ^9 e5 e% z7 B, [) G0 b _serialPort.Handshake = Handshake.None;
/ H1 k1 e/ k5 d+ J2 k //设置读/写超时值+ F, `# T9 ?5 n8 V! @
_serialPort.ReadTimeout = 500;, O2 t( {: C) G5 y3 ]) } I0 x
_serialPort.WriteTimeout = 500;
; a& Q) s- ~' e+ J& l //打开串行端口% A' s2 T0 A+ p4 d7 ^4 l3 N
_serialPort.Open();& o; n5 b2 z- V
}
' \% J; c3 ^1 ~& L; `2 A- m catch (Exception ex)
- E- w5 T9 l- s7 L0 A) O, j {9 w0 V' E$ [. @. r6 m0 y
Message.show(ex.Message);
% }6 h) _! O& v9 s% O) G }+ m: }# z) D: j$ |6 E9 d
}4 F- \: x1 a4 i
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。- n1 t7 G: w+ L3 D0 e) y- `
按键命名 提示内容% U8 u4 O" ?. J G$ k
button_PLY 播放/ F( o' S1 S% X+ @4 ^( Z7 r
button_STP 停止, l" O6 |" |" f7 H, |- g9 P
button_FWD 快进8 ] x: W8 S9 s
button_RWD 快倒
3 ^1 D! b2 D+ P+ u/ V `- b( o button_RCE 播放9 G% b$ J& ~ p" G" A
button_RTM 清零; a, ]" ?1 L2 H% U* E8 c6 l
button_ZLO 定位到零# y( i4 d0 P+ p6 T5 d0 z& n2 ^
——双击按钮图标增加按钮处理方法(以录音为例) O+ q4 z, E8 p" J* g
private void button_PLY_Click(object sender, RoutedEventArgs e)
* l3 F: d. S, H' W* J& M {
6 a& O# a# Z d4 h6 |) v try
- `8 e, `3 P* U5 ? L8 Z/ _" x* T {
, j7 q# F+ f9 E3 T6 f; r# g //发送从输入信号直接输出方式控制字符串
' f* q& t% e6 ] _serialPort.WriteLine("INP F ");2 m( C7 M9 X0 O' @7 g7 x
2 U7 w5 j8 s& }# Y. @3 } //休止100ms3 L( ^6 n) G+ N# Q' R3 u
Thread.Sleep(100);
: J5 e2 s. t1 I+ y5 [' M8 o //发送所有通道Ready的控制字符串! C4 D3 Y. i9 {8 p
_serialPort.WriteLine("REA F "); 8 k1 R, d7 ], \% _
Thread.Sleep(100);
2 Z0 w1 \' y6 y) ^' A! r9 l$ o //发送开始录音的控制字符串。, A8 t9 V; c% a7 I# @) A& N
_serialPort.WriteLine("REC ");' h2 z* G" D4 Z: k9 S6 q$ l
}
2 `% b! l- j& k catch (Exception ex)5 x; F5 O' L3 i2 _
{
s. O0 d- E1 z! q# z Message.show(ex.Message);" H) r5 v9 }. v1 g# n$ n
}
5 R# Q- o5 F* N8 R& o% Z }+ H0 Z$ \+ |! B* v2 g8 P
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
9 h: ]; y$ H0 r" B; J6 v; A 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
3 c9 C8 ~8 H0 L# ]8 m2 x 播放控制字符串:PLY+空格+回车
+ B; ^5 Z! {" {* c+ W$ f7 S 停止控制字符串:STP+空格+回车2 J& ^+ {* l% \ ^1 n. f& r: x/ H
快进控制字符串:FWD+空格+回车/ T: P$ y$ ^* U3 d( ]7 L
快倒控制字符串:RWD+空格+回车, J6 v# V# P/ d3 b( N# w! P
复位控制字符串:RTM+空格+回车
: @0 _4 `% [+ D/ I* L! O 定位到零字符串:LZA+空格+回车/ P$ F. W4 K$ O3 V$ r& H
# w5 C2 a' w' E: k$ A o# B U 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}/ n! _% T: T# V4 L) z+ X, J$ A" V B
' }8 u$ W9 A5 ?% q( F$ h 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。. R9 X; x0 w+ V
|