第五部分 控制软件编写实例
( `( X) D$ H# C$ d
' c# W1 C6 m8 |$ L9 C- C# E- @+ i 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
. z, v/ \0 k3 u& Q, [* b 1、开发环境
( v/ Q2 X- C" U; e% x 编译软件:Microsoft Visual Studio 2010
+ n1 J. @! c! o8 B2 f 基础框架:Microsoft .NetFramework 4.05 H7 W, A* r7 b
程序框架:Microsoft WPF
5 \$ O. n: v! T i! \ 编程语言:C#1 @4 W# B+ H i- Q
2、实例功能
! B- {$ v3 o7 w ——播放功能* M8 i2 d7 [" a+ ~: m) Q& C
——停止功能
. j" J0 G, P o& a0 C7 l/ {8 W7 L ——快速前进功能
6 `. Z% V; B* x% T) M ——快速倒退功能. k" n! o! _# ~4 W- z( ~
——录音功能
5 }( P; j9 V1 E) p2 \5 D ——复位功能- f4 f3 h/ `6 \/ ?6 q
——定位功能( ~) i4 c q& G# K+ R$ Y0 I" L
3、实例代码
2 x2 Y {/ B1 W5 W6 d ——在Visual Studio 2010中新建一个工程文件。, m0 h4 E% U8 Y$ R: i: V8 y3 {
——在工程文件中的窗体代码文件中添加IO端口的引用。
# Y3 S# y7 A3 a& z- R+ d( ^6 Z using System.IO.Ports;
x! B3 P$ k) a4 M1 }! B0 ?$ d* I ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。+ Q, t2 e0 s6 d3 S7 ^. Y! N
static SerialPort _serialPort;& O& |$ i* g& b8 p7 ?
——双击窗体增加窗体装入事件处理方法# R% Z7 Y% B( @$ o- z4 i+ T6 G. a
private void Window_Loaded(object sender, RoutedEventArgs e)8 t7 W3 X, s, T' d! J* N
{
+ \# v0 [1 R T& G3 m/ c7 b }
0 P5 H k; }9 C# ~$ U* ? 在窗体装入事件处理方法中写入端口初始化的代码。
4 `2 Y* m6 {: E3 i( L1 B# c private void Window_Loaded(object sender, RoutedEventArgs e)" R J( w3 T0 M0 b
{" K6 e% j2 C9 r i- E7 d
//创建一个新的串口对象实例 t$ S+ N& j8 a! J% b: c0 [# x
_serialPort = new SerialPort();
) d7 j% W+ U5 ?2 i //枚举计算机中的串口
) e! x; b- A& Q string[] ports = SerialPort.GetPortNames();! j; [( s2 `: c% R3 g( c7 F
//如果系统没有串口装置则退出
, `7 [5 q: n8 k9 E4 i* N0 ^ if (ports == null)9 a( z8 E1 _& m( ?& l, l
{( j. w* z( ^0 T7 B# ?- C
this.close();
/ I7 x" p- y! v- r" \- ` }2 B5 r7 [9 v! w s
try! ~2 c/ T/ O$ r `! I: l
{4 I$ j! _& J. L$ l+ N
//使用系统的第一个串行端口
5 f3 t6 Z* x1 K" I: S _serialPort.PortName = ports[0];* q' d1 f+ j6 R. R8 ~: t
//设置为9600的速率+ K8 O. m. o6 U2 N
_serialPort.BaudRate = 9600;
- s# }, K- L t. D& Q0 ] //设置为无校验
, S% V0 L+ \1 V S _6 B$ T Y _serialPort.Parity = Parity.None;
( ~1 H P+ C+ @4 z
/ p4 {3 i$ G* g9 _ //设置为8位数据
! q5 `3 Q/ w, [" f6 E4 X _serialPort.DataBits = 8;4 {! ]. e" I0 e% ~
//设置停止位为18 e! X T9 @0 |; }( C
_serialPort.StopBits = StopBits.One;
2 q$ i. G( ]9 j% v9 } //设置为无握手
5 Z6 Q7 r' f" H* O _serialPort.Handshake = Handshake.None;3 [; M9 W, [ s0 ]3 w
//设置读/写超时值
2 ~7 \* V( w. y3 |/ C" `$ N* {$ _ _serialPort.ReadTimeout = 500;
8 B% e- w" H" L( J _serialPort.WriteTimeout = 500;
; X: F0 Q+ F: Q$ O //打开串行端口
7 o9 ~8 Z, V |: u$ N$ V3 ~1 Y _serialPort.Open();8 O( v: o5 o+ t0 |/ u( l+ f# o
}
1 [* P. f5 T" h2 k catch (Exception ex)
6 h+ a/ j, B5 m. S0 c {
0 B# {3 f) ~4 t3 P, y+ D6 O# ~ Message.show(ex.Message);4 Z, Q V/ b3 h! A& w$ ~6 H
}% o4 x) N8 @# D) n: T
}
# {) ~" F$ ]! L ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。1 c6 }/ D* D! S" [- b4 ?. |
按键命名 提示内容
4 u9 e/ ^% h4 F) r% y button_PLY 播放9 F" O9 e( R: p7 v* l5 ?+ E
button_STP 停止* a( ]" m3 x3 U3 @
button_FWD 快进
( ^) x. P, ?3 D) X7 y button_RWD 快倒
8 n4 u" h+ s" n button_RCE 播放. A) O4 E" J" K) V& K' B
button_RTM 清零
- x/ e4 d7 p; A3 k5 q button_ZLO 定位到零
2 ?# o. L, n! ~7 h% J ——双击按钮图标增加按钮处理方法(以录音为例)% R4 l1 D+ _9 A/ R9 P- v2 y/ M
private void button_PLY_Click(object sender, RoutedEventArgs e)
; B/ w1 b5 Y* Y9 R4 a* y3 M {( z4 C' T, r' ~" k) t& l% }
try
6 y. {# n' U. M% f: ] { A( G2 ], ~. Y0 L+ t, O
//发送从输入信号直接输出方式控制字符串 m# W( ~% w c! z1 S: e9 t) Z
_serialPort.WriteLine("INP F ");
! Y6 X: u6 S' K! f$ }/ P8 L- E 8 a4 V# \, ?8 a6 N' v: Q2 m
//休止100ms
! C0 w: S3 I* C. |* S Thread.Sleep(100);4 F- Q4 g0 e+ y0 t& v: Q ?
//发送所有通道Ready的控制字符串
/ X0 e+ m7 ~! i5 D: } _serialPort.WriteLine("REA F ");
8 r& b1 \5 L; k4 A9 q Thread.Sleep(100);
9 g6 W' g/ \3 }/ `5 B+ R //发送开始录音的控制字符串。
2 B- ~0 H8 h2 b% y/ y) A+ w# } _serialPort.WriteLine("REC ");4 t! r# X5 Q. @" f- ]4 q& V W
}% v$ ~+ @+ M G' B+ V" \0 M0 Z
catch (Exception ex)( h4 W8 @6 o: R7 y+ o, P* P" j* Y
{
% O' p5 a- p2 m5 W% ~ Message.show(ex.Message);
7 A t7 @, B! B. _ }5 n; ]- P6 A) z" h0 q
}
! D; O0 s- L! I: D 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。1 q; Z4 R- ]" w1 Z- o6 n: E
按以上方法增加相应按键的处理方法,并发送对应的指令即可。( Y, [# t. @/ n/ O
播放控制字符串:PLY+空格+回车
9 p0 [5 H/ X7 ]! X& i3 A 停止控制字符串:STP+空格+回车
( Y4 O) S l3 i9 x" \& x 快进控制字符串:FWD+空格+回车" U* q. G3 H+ Z
快倒控制字符串:RWD+空格+回车
9 I/ T( J; V1 y$ \ 复位控制字符串:RTM+空格+回车, @$ v) P) a8 D4 Z: G" U
定位到零字符串:LZA+空格+回车$ n) j* {" _+ L4 w, B
$ s4 f: u6 R. j4 X6 ?
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
4 [% g% S% W$ v! _ [! Z7 o6 o ; }% ]( h; L# v/ H
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
' Y; h! }0 ?& l |