第五部分 控制软件编写实例
+ ]6 Y3 X- U3 \, |: Q& ~' c& M( k" j% E# d
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
5 K1 d( h7 `+ r5 \7 @& P( p 1、开发环境
) A L `5 T$ R# r' O. q/ R' e0 M 编译软件:Microsoft Visual Studio 20106 K0 b- c; z! Y2 p S% q) S) Y
基础框架:Microsoft .NetFramework 4.0
$ K3 E3 m7 F# v* U 程序框架:Microsoft WPF
( o/ N8 E2 H- K2 R) e' K i 编程语言:C#! x: F1 f" f0 I$ o% w
2、实例功能
4 h5 ?6 c! ]2 J7 c- w l+ t/ T ——播放功能' N# o: O" n% L2 g' W2 }# Y
——停止功能% X1 b% L4 `5 v: R u& l+ x, R7 C3 B
——快速前进功能, @: [1 w: L3 Q' _8 ^3 w3 o
——快速倒退功能
9 X. Z7 \8 q* r" |( w/ f1 B ——录音功能* Z- Q% Z9 K' w8 X$ S
——复位功能; l x: `; q6 c" ~" a( H
——定位功能
8 N6 p) D6 `' y' k2 q 3、实例代码
3 }2 U- C3 o/ N! b, z1 t ——在Visual Studio 2010中新建一个工程文件。
: A4 a! M! g3 v7 j3 M# e9 @" w [ ——在工程文件中的窗体代码文件中添加IO端口的引用。: m& {$ Y0 O) q+ J
using System.IO.Ports;
. }; N1 S7 c8 ?1 }/ w+ K' z ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
8 M" T, z) }1 l* N static SerialPort _serialPort;
# q1 L3 c5 F" o! X5 k1 z% p ——双击窗体增加窗体装入事件处理方法) H! w' r& f# ^& y) N# C4 ~/ t5 g
private void Window_Loaded(object sender, RoutedEventArgs e)
; \& v4 R3 i) q! q0 M0 e {
5 C- V4 S1 ?( m6 [- \+ h6 \2 x }) M% `# {9 }9 ]% o
在窗体装入事件处理方法中写入端口初始化的代码。
4 G1 q8 f# _' P3 s' j- K, W4 d private void Window_Loaded(object sender, RoutedEventArgs e)
7 s* a- v9 j5 r7 W6 N {
) |& D$ U. n4 f5 \1 Y/ @7 _ //创建一个新的串口对象实例
+ C! L, P" |% ~ _serialPort = new SerialPort();8 d) @+ G0 u; c9 ?, S
//枚举计算机中的串口
$ Q+ C4 j u4 U1 R; x6 m/ } string[] ports = SerialPort.GetPortNames();( F6 H a: A _/ @
//如果系统没有串口装置则退出+ `8 {! Y' |% [/ o1 C( k5 K
if (ports == null)' u' {- [$ H# r' H* l' @; x
{
6 z& @/ T" J3 Y this.close();7 I' _; G G/ U9 _* l) Z" L+ d0 V
}$ a$ R! P: G8 a1 }$ L2 n6 s
try
) ?" G C: B( n1 ]6 ]; v7 F {* I4 ^( b# G3 F. h9 I
//使用系统的第一个串行端口
3 ^$ {8 R- O3 i1 O# I, {" n _serialPort.PortName = ports[0];" U) [, a0 |- [0 q+ c- }
//设置为9600的速率6 j1 d `! A! z$ A
_serialPort.BaudRate = 9600;! g* n) [0 {" [ i% \
//设置为无校验
4 z( x" P+ z# o1 L7 Y$ @ _serialPort.Parity = Parity.None;, o. N' q: `/ l
0 J; m% j3 f4 s, ^ v: t! v //设置为8位数据
7 n: h3 Z4 L5 |* d9 S& ?$ P _serialPort.DataBits = 8;
- F4 _& s* L7 A- o0 N% A //设置停止位为11 {2 |( {, f; ]$ W6 G# c4 g
_serialPort.StopBits = StopBits.One;
9 _1 `, U; q2 }* i& b //设置为无握手2 s6 X, Y' g4 o
_serialPort.Handshake = Handshake.None;+ I6 L- h7 c) e3 F; A+ b
//设置读/写超时值
9 g. E# q: R1 F _serialPort.ReadTimeout = 500;
4 _7 }* S3 _- k# K% W6 }, q _serialPort.WriteTimeout = 500;
' ~; |) q5 U( x' i! ? //打开串行端口
' Y4 ^: n- c4 @6 f! H* h, V _serialPort.Open();
6 T) }- P8 x- O+ s# C4 B: M }
% v( k' t4 j$ x7 I( l catch (Exception ex)% M6 A, ~# g) z( {
{
" L! j* R7 o$ \, u Message.show(ex.Message);4 l2 J: M* ]9 _
}
) d, Y% Y- N( O7 u# A- q9 {, V7 ^ }
% N2 f% X) h/ m- z: P0 u5 B) b ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
7 B0 m4 i/ `" b1 H 按键命名 提示内容9 k4 q2 p, M3 m4 l+ y; W
button_PLY 播放" [, k" I% \5 | o Y* d2 S3 i
button_STP 停止. ^8 @0 ~5 J: d1 `- G# W! c1 x
button_FWD 快进 g! R) H" s* k
button_RWD 快倒! C8 H, o' i" P" X' j9 Y9 l9 g* Q J
button_RCE 播放
4 ?4 {( n5 B9 B4 w B3 y, ~7 H button_RTM 清零! L- r& K' y' T5 ^5 K& U1 e' \
button_ZLO 定位到零
. p9 ?; d2 u* u; O' W. N ——双击按钮图标增加按钮处理方法(以录音为例)
: T5 a w A+ @2 u) z7 D' A+ H8 ] private void button_PLY_Click(object sender, RoutedEventArgs e)) R2 n* V+ w- z
{
& |7 p8 X" k# ^" Z3 K& E try6 L1 d0 [3 f( ]1 F9 t
{1 Q. h# ^3 T5 n3 q+ D/ `
//发送从输入信号直接输出方式控制字符串0 \8 L' N4 u8 X% k# P, ?
_serialPort.WriteLine("INP F ");' q) r ^! e6 j$ @! U
+ h0 j" A8 k, B D //休止100ms
0 E4 N, V' T+ R( p" u% ? Thread.Sleep(100);
" v" b. V5 _: \$ n3 v1 y9 l8 n //发送所有通道Ready的控制字符串+ p9 y+ u8 n4 N% S
_serialPort.WriteLine("REA F "); 9 Q3 V8 b$ \9 j( Z
Thread.Sleep(100);
! b4 z. ]; |" s. ?; `8 h0 a //发送开始录音的控制字符串。
$ s+ O8 C5 Q. h: A# ]; k0 Z K _serialPort.WriteLine("REC ");
8 W: ^) {) S8 }. G }1 H* S: ~+ ]6 G6 ?* P% c9 J2 v
catch (Exception ex)- Y7 w: R: y. N0 `& a* J! m
{' X- H, q" T. @ d
Message.show(ex.Message);
0 {. h4 |. O/ i8 e* o9 e }
2 a: q: n2 U8 ~8 i; C }3 _: B" [, z) ~% u* Q9 @2 m
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。4 U) A/ b( z; @8 D; v: W$ S
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
" X8 J9 k# u, x1 I6 d9 F/ ?& z 播放控制字符串:PLY+空格+回车! [8 j' r+ g* N' E1 F3 z. r
停止控制字符串:STP+空格+回车
0 C- G' j! f! k2 N9 u. t" e- [ 快进控制字符串:FWD+空格+回车
0 w$ h! b0 Q w9 ?5 g/ m& R8 H 快倒控制字符串:RWD+空格+回车2 J- r: e1 Y5 P0 |4 r
复位控制字符串:RTM+空格+回车
6 P0 \8 t$ Z; {# R3 y- J% } 定位到零字符串:LZA+空格+回车
+ @; {! N1 p0 A( I! ?
( D8 H* Z* T6 E5 ` 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
6 D4 c! v L7 u# M. X
6 H+ c; l- L4 ]! W2 @6 q( `( F0 ~ 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
: F. x) M$ V& m) [2 c |