第五部分 控制软件编写实例- n) t; X# L+ w9 e& W5 Z$ T
2 M3 X* W/ X7 I% O7 r! i
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
: n1 ] \. V4 \$ R6 ? 1、开发环境 n( O2 [. u e4 O/ v# t# x9 h
编译软件:Microsoft Visual Studio 2010
; c' B9 P# W% ]( l& ^* f7 ` 基础框架:Microsoft .NetFramework 4.0# y4 Q N8 E+ m4 S. m1 r% E
程序框架:Microsoft WPF# w. _2 W5 e9 L! q9 r$ g( p5 H
编程语言:C#
* y% g: | A9 [8 y2 b, A 2、实例功能 H3 y* }$ W0 D3 d3 `) O6 G& ^3 z
——播放功能) D- [( j8 a% ^- q, C5 j
——停止功能
6 C) E% s4 i3 A3 f, f% z# W/ @ ——快速前进功能
; ^4 m" k. U* H; D ——快速倒退功能" `" h3 w. r* L/ S1 C
——录音功能2 z: q, J* ?+ t" d8 t
——复位功能
/ O# ^; n. F7 [& |, n; H ——定位功能
& D& b, U( `2 a# B 3、实例代码. W/ R- A' F! }% a' e
——在Visual Studio 2010中新建一个工程文件。
3 v' f& Q& u$ ^- `, [, o9 _ ——在工程文件中的窗体代码文件中添加IO端口的引用。* P y( A2 F; E# q" W9 {1 k( f
using System.IO.Ports;: d' j& e) y8 h: e3 h& E _9 @
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
8 N# c+ o3 ?5 b1 c& F( _ static SerialPort _serialPort;) a' O6 A* |' O9 x7 O
——双击窗体增加窗体装入事件处理方法
& Y0 z7 e! c: z6 k" X private void Window_Loaded(object sender, RoutedEventArgs e)# G3 x. r i+ \2 I9 y, [3 l
{
1 R, f, s5 t% h" Q, t }5 K2 g. s6 c+ |1 R8 O: A9 d" Z! [$ }
在窗体装入事件处理方法中写入端口初始化的代码。
: s( L; ~. ^+ A private void Window_Loaded(object sender, RoutedEventArgs e), ^/ M% d& q g: z3 |/ ^
{+ [% S9 u( M E# o
//创建一个新的串口对象实例
! h1 b% p: I1 a$ w _serialPort = new SerialPort();
( C" t* {" z' N //枚举计算机中的串口+ a) B8 ^ b' Q4 o# V
string[] ports = SerialPort.GetPortNames();
; L$ P0 \+ D# J1 { //如果系统没有串口装置则退出
4 T& F* Q" b: P if (ports == null)
! \' ?3 r9 v- N- z, ]0 @3 ` {/ D& _, P' S! l# I5 e
this.close();
5 V# }8 x; k+ B, ?4 p- g0 v } R6 M/ i0 b' E$ P& f
try
! c7 ?- o7 [3 q7 { {/ F6 n/ b' K6 F K" X5 ?
//使用系统的第一个串行端口
. _$ g: W) T" |/ f- B% P L _serialPort.PortName = ports[0];
+ w7 X( M. Z* {, N$ b% t //设置为9600的速率& O) u: G1 M8 N
_serialPort.BaudRate = 9600;
8 U* {; }- ^. S4 Z5 g/ i( R0 P //设置为无校验
: c# d" \8 h' u; r9 L* p0 W _serialPort.Parity = Parity.None;. O6 B7 R7 T2 E; D
9 @5 X: f' N6 ?4 T //设置为8位数据
* D- k9 l" ^5 ~ _serialPort.DataBits = 8;7 B( x# L* F% z1 f2 w
//设置停止位为1
1 E) q$ G+ B! l, l, l0 C _serialPort.StopBits = StopBits.One;0 @7 ~5 Z7 L4 |9 d$ j3 J0 c2 h
//设置为无握手
% S1 x" h! m5 m W( b- ` _serialPort.Handshake = Handshake.None;$ u0 \2 i) G+ [0 v" s4 K
//设置读/写超时值
% c% _5 M3 e9 j/ `+ I5 P _serialPort.ReadTimeout = 500;
B/ x/ R- e4 n Z3 r _serialPort.WriteTimeout = 500;% N* X; L. o) m a
//打开串行端口
7 X* @0 \+ D2 k" l8 a: h" l7 X _serialPort.Open();
3 [* T$ S! v2 C) \6 s }2 a7 T4 ^; B, b1 G$ V
catch (Exception ex)5 R# {6 s% Z9 K
{; o6 S& }. [$ x8 G9 X: I
Message.show(ex.Message);$ Q% F/ d. T1 D/ r3 ~5 |0 Q3 \ x
}
/ n3 e/ B/ n% u( v! ?, b" i* w }
5 T1 c4 b/ G- A3 X Y1 g ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
5 z; c. |9 w6 e, i9 m# I 按键命名 提示内容
2 X* E9 h9 u! z! W7 K. H2 x. \ button_PLY 播放
j! n; K+ e/ y- Q button_STP 停止
% b- R( s7 U0 A( T. d button_FWD 快进+ X) k( M4 x0 _3 k8 A" F: N
button_RWD 快倒5 D7 Q8 ^. q" q' m! F
button_RCE 播放7 f n: b' r; m! E) ^' ]9 v
button_RTM 清零
+ Z; V0 _# G: t+ {7 `, g6 ` button_ZLO 定位到零1 Z0 P/ k$ u5 r/ @- `8 Q# a( H' I
——双击按钮图标增加按钮处理方法(以录音为例)
% `* S( {5 ]7 J/ S) S$ e private void button_PLY_Click(object sender, RoutedEventArgs e)9 L; D: j$ A7 A; O9 h
{( }2 P/ D, l. `4 b
try
' E2 i3 L: K9 q0 J {4 n k2 G0 Y7 s6 D+ ?; A8 i% M' }
//发送从输入信号直接输出方式控制字符串
4 C; @; Q: p/ r- h1 A' y _serialPort.WriteLine("INP F ");
' e8 G; S0 e& X. i, m( Q: M2 H
4 f% \* w# j$ T" I4 J+ B //休止100ms
8 ]; [: u* Z4 ?' K& O Thread.Sleep(100);7 y" ~* t5 e" q' {$ r, d$ g2 S6 Y
//发送所有通道Ready的控制字符串
0 x: f6 [$ s) s+ B. v z5 d _serialPort.WriteLine("REA F "); 7 k1 o7 M. C9 Y2 D, w$ g/ V; h
Thread.Sleep(100); Y5 q9 J0 B2 \# r/ G
//发送开始录音的控制字符串。
' m% u# S! T/ ?, l3 u _serialPort.WriteLine("REC ");
# ^" w% c% ^6 w- l }5 r# z0 F1 f" s7 S% S& R+ k
catch (Exception ex)6 X2 B' G! P5 g$ k* t2 {
{
* u. {% f4 Y4 Z6 w# ^ Message.show(ex.Message);
" t4 B6 G$ E) b0 A+ j }- R" V8 o" h5 d3 D8 A6 v: y" m8 O
}, Q9 ]+ t- i2 @/ h% L# n
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
0 G: o. g$ u! @7 K 按以上方法增加相应按键的处理方法,并发送对应的指令即可。9 R n7 ]# e6 Y: A+ u8 K* {8 d
播放控制字符串:PLY+空格+回车
& W: O# j, F C1 G4 {+ y 停止控制字符串:STP+空格+回车
; s. u+ X: _- x& P% H& H 快进控制字符串:FWD+空格+回车
. v5 ?, m$ e; g5 m 快倒控制字符串:RWD+空格+回车
9 y+ r. q& c9 Q/ U9 V 复位控制字符串:RTM+空格+回车' n2 b$ k$ D( A
定位到零字符串:LZA+空格+回车
6 y! i: h( m6 Y0 }
/ {3 H1 x" U6 f0 Q* m2 P 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
" U: R5 m( ]. s( ^, ~
8 G: b/ q# C/ x% n) ^. k" | 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。) R1 e6 E# K3 F3 X4 c1 c
|