第五部分 控制软件编写实例
& O' u: ~8 j2 T) j
- o7 w: S7 `, s3 h+ I 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
2 w; ^$ Y6 m& j2 {* @' S b 1、开发环境: C8 F% H# p- I: P
编译软件:Microsoft Visual Studio 2010! _3 z9 i B9 X: n! h" B$ j5 j7 f7 g
基础框架:Microsoft .NetFramework 4.0* p& N: z8 E' Z. y' `9 \! y/ o5 j
程序框架:Microsoft WPF
3 t2 w2 q% v u. J3 f4 x 编程语言:C#/ ^- e8 ^- i! o: N* k7 Y
2、实例功能3 \: c8 w- J) h4 J1 J! S0 \4 ^
——播放功能
% k E6 r( b9 r% E ——停止功能
9 C+ D8 @ w: N/ |# T# M ——快速前进功能' x) g4 E6 B1 E0 V
——快速倒退功能
+ ^/ W7 q8 U5 |* ^ ——录音功能
1 s& j4 a+ G0 s% E% s/ ^! K ——复位功能) e D! [: p# @
——定位功能( c3 i3 m5 o' s, C) B2 P7 ?
3、实例代码" k: q+ x/ J) i: W
——在Visual Studio 2010中新建一个工程文件。* b I* t9 y2 D
——在工程文件中的窗体代码文件中添加IO端口的引用。
* O. y3 H+ w* G+ K. H4 I0 r using System.IO.Ports;* n6 M f- R7 ^8 u$ g% }
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
" \+ o9 `/ a8 {% u& B# \8 z static SerialPort _serialPort;
; M( P) h8 R& z }, I [% _ ——双击窗体增加窗体装入事件处理方法
" V1 k. a0 @; k/ J- [6 V private void Window_Loaded(object sender, RoutedEventArgs e)
# _& |( D; s5 j5 o- }8 z. [ {' l' J2 _. v3 M$ ~- ?
}. c! R- [* b/ l* ^
在窗体装入事件处理方法中写入端口初始化的代码。; S0 E% I& N! ^( q" @
private void Window_Loaded(object sender, RoutedEventArgs e)
; m6 g# o; E8 @; O0 E U) h {! N6 e* [( n/ Z9 T% v' @) @
//创建一个新的串口对象实例
7 S) s& x* N# Z8 D9 C4 A _serialPort = new SerialPort();+ i% c- }8 \3 @ o- i7 }. L8 \
//枚举计算机中的串口5 l# n4 ] [9 F L
string[] ports = SerialPort.GetPortNames();
( n/ j7 a: s9 r q0 v# ^ //如果系统没有串口装置则退出
( j/ _5 v6 H; `1 k if (ports == null)
( q9 y4 r& ~: B& z {
; e+ p# |/ j# `3 R) b5 D" E& _0 H this.close();* f0 \" ]: r8 G* ~ l. A1 t
}8 @1 Q& j5 e' ?- f6 z" z
try4 V' A4 L( V& V6 J, t
{) h$ ~$ s7 _% ^7 g0 X/ \/ o
//使用系统的第一个串行端口2 z, A3 Z2 V6 O9 C
_serialPort.PortName = ports[0];) N/ G2 h5 Q2 x3 S% T# B4 A
//设置为9600的速率: j7 \2 I9 W A
_serialPort.BaudRate = 9600;
3 t2 @3 x- u" }- r+ r //设置为无校验
, c, K/ m& k( k4 o; q7 d _serialPort.Parity = Parity.None;1 _( M! T; W: U, G. c
( L' H' }. ]9 t) o( i2 Q- u
//设置为8位数据
+ I/ h/ N6 V3 A1 |0 ]$ M _serialPort.DataBits = 8;8 Z0 v' |1 j, G/ l0 M. F. k( b
//设置停止位为1+ X& Z# X4 C$ F" {4 `6 I
_serialPort.StopBits = StopBits.One;
! q/ O q$ O, b. C7 K0 K //设置为无握手6 e9 ]; ~" t, w, u: `
_serialPort.Handshake = Handshake.None;: Y7 |8 b. P( y3 P2 X3 F
//设置读/写超时值. O. h+ a( ]$ h0 Z/ N
_serialPort.ReadTimeout = 500;- t" ~, l) z" z# Q% O5 _
_serialPort.WriteTimeout = 500;9 _, A5 [# X& R
//打开串行端口
$ y- W9 E# w" W6 s2 {& p _serialPort.Open();
. r6 Y2 s2 d- k }
. X+ u3 i. r' }6 K! R( c catch (Exception ex)
" D8 h, m2 s2 Z5 m# g {
0 M: c' d, g! N- x, z5 ~: l Message.show(ex.Message);# S0 K2 l, N& v& b
}
" H( a- p1 n$ S5 q }
% k4 \9 m1 p# g) d, `% E ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。0 E' H. Z& e+ T
按键命名 提示内容" s7 M2 k9 ?1 s; ^# y
button_PLY 播放
9 ?3 Y( x. P$ P4 T* Q2 Y- M button_STP 停止2 m' A5 Y: h0 ]
button_FWD 快进
& _# Q5 P5 b& P9 T4 q+ t) _7 m! o. S button_RWD 快倒+ l: ~& ~9 z1 [5 v( O O
button_RCE 播放. @9 M1 E3 g$ d* \8 @
button_RTM 清零
# G% Q& a q; V; C: n+ Q# C2 x button_ZLO 定位到零% E: ^" y9 H6 D1 i& E- }4 ~4 e7 B {$ U
——双击按钮图标增加按钮处理方法(以录音为例)4 m8 {% @/ N' P. e3 n
private void button_PLY_Click(object sender, RoutedEventArgs e)
' s' C3 N" F/ N b6 y {: L8 m. _0 L5 W
try( c/ x' _4 f9 u8 A1 K
{ D' [9 L0 u$ d7 {" P2 t% k
//发送从输入信号直接输出方式控制字符串
R2 d! j# L& p2 |& X _serialPort.WriteLine("INP F ");
) C, `0 U8 X# i* z * w/ t) c" K0 ~0 |, e
//休止100ms
2 r! g' B+ q- g Thread.Sleep(100);
% I% y2 q- q0 B //发送所有通道Ready的控制字符串+ {+ J" R3 u' X
_serialPort.WriteLine("REA F "); 8 T2 Y( B, B$ M- _
Thread.Sleep(100);+ B; }1 b# I% e; q
//发送开始录音的控制字符串。
4 p0 j+ D0 n! ]7 b _serialPort.WriteLine("REC ");- J1 d$ T5 G) b" a
}. T( U Q I v9 I
catch (Exception ex)6 p; O* r h1 H% I
{, T8 R8 ?. h- Z2 U4 ^+ o; d
Message.show(ex.Message);$ y& P( r& P7 P m) f
}- q6 z$ R- [( E- M; R6 R- K
}3 p- u4 ~: u8 R. e' R- h
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
2 F8 v4 J! Y" X# i ]) z" r 按以上方法增加相应按键的处理方法,并发送对应的指令即可。+ n. Q' U5 O5 E' Z7 _
播放控制字符串:PLY+空格+回车9 e5 }% _$ ~4 `: [
停止控制字符串:STP+空格+回车
$ w) W7 I( U2 X4 J 快进控制字符串:FWD+空格+回车
4 Q, Y1 ] F+ \9 ~! C# x4 k6 n# I 快倒控制字符串:RWD+空格+回车( [9 K: b- V/ }/ Y" t" J4 _
复位控制字符串:RTM+空格+回车
' {/ c1 z- x9 I' [9 \( p 定位到零字符串:LZA+空格+回车; X+ c, n! m: o! ^0 z5 L
6 C9 R2 n2 c( A( ^6 N- S 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
. G0 X0 s. F# h9 ` 5 M8 O' m; \( `/ R+ y
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
" u! d4 w/ D7 Y% G2 A" a' @ |