第五部分 控制软件编写实例
* a2 f; Z2 G7 k7 e$ |' R
9 _ w2 B# o6 Z 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。6 a7 t- S! K' |# k
1、开发环境5 Y/ _5 U/ E2 m/ {' {9 Q" x
编译软件:Microsoft Visual Studio 2010) ]% I7 G, G& h
基础框架:Microsoft .NetFramework 4.0, Y1 k& t) @( T: O* o7 E! W7 s- |
程序框架:Microsoft WPF, n3 o: u7 U/ K! ?4 i$ |
编程语言:C#3 E# W+ X$ ?# M0 n5 q1 \
2、实例功能
$ W( ~! g5 t9 h# s ——播放功能( C1 ^& r) [$ ]% o; l4 \1 a( N
——停止功能& p6 s1 f8 j$ g, A. F9 o5 k
——快速前进功能2 t* _1 I! m" B+ w( c, y+ P
——快速倒退功能
" F! R/ r# |! Q- V4 I ——录音功能
! h" m* m! m/ s' m2 S3 G3 | ——复位功能
; i" ~, g) M, y3 d( R8 j- e ——定位功能+ x6 H R! S. D, n
3、实例代码
* w2 M# F( l4 @ ——在Visual Studio 2010中新建一个工程文件。0 ?6 P9 Y# ?9 V
——在工程文件中的窗体代码文件中添加IO端口的引用。
( c" G7 {2 T6 }( Q9 G( B using System.IO.Ports;
. |4 f3 I0 U/ E# H, v# h ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。7 d4 S; M/ t7 ]( t# H
static SerialPort _serialPort;& z B+ x! k9 t
——双击窗体增加窗体装入事件处理方法; n+ @. m1 I3 `4 z; |2 ?8 S
private void Window_Loaded(object sender, RoutedEventArgs e)5 V* Q+ n& a! c! T
{% d$ h( S6 _' U% Z
}1 C3 M& I& p: p4 A9 M
在窗体装入事件处理方法中写入端口初始化的代码。 ^+ o) g! y Y4 }, X
private void Window_Loaded(object sender, RoutedEventArgs e)
$ _( T$ E* t. ?- [5 g: M% T {
6 T/ \/ q4 f1 x: X5 L5 Y7 J //创建一个新的串口对象实例" v" z& n) O% E- }* O9 F
_serialPort = new SerialPort();6 i- x9 D: J8 D7 I6 l
//枚举计算机中的串口
0 b( E# m7 _$ w' W+ `9 L2 v8 u( \ string[] ports = SerialPort.GetPortNames();
8 N7 W7 V3 y- U9 }; C; t! E //如果系统没有串口装置则退出% s7 P" P) y( O9 ?5 m2 B
if (ports == null)0 y+ X. S* `* r# T. r
{
- y0 a0 H0 ? o this.close();
% n. l# L+ N9 G& q; ]% Y) w }
0 t8 U; L$ q- a& Y/ d5 D try
3 I: P3 Y+ D; o# b o8 y5 z/ H {
! X3 T# j" ]8 F //使用系统的第一个串行端口
$ u" o! v( U- K6 ^ _serialPort.PortName = ports[0];% J \) W" |5 I6 `
//设置为9600的速率
+ _: S. T! H; _3 y, j1 W _serialPort.BaudRate = 9600;5 _; z0 H9 J3 h# S2 k# e
//设置为无校验
" S6 z; I2 j2 L/ }1 e" t _serialPort.Parity = Parity.None;
( G1 T* [* |2 v6 n' [
5 ]' T: @ C c" W //设置为8位数据! ]( {/ F* W; a# u! \. l
_serialPort.DataBits = 8;0 N, W* q2 S& _ M6 Y
//设置停止位为1
; o" X5 e* p# c% D! } _serialPort.StopBits = StopBits.One;& ?( I! ]' m# K' a
//设置为无握手+ b3 l a/ p2 |, M
_serialPort.Handshake = Handshake.None;
$ ?' J+ @; k$ y+ R7 {+ L //设置读/写超时值 g8 \: l7 n: u
_serialPort.ReadTimeout = 500;# G) k# o% W) n6 \9 _6 J, r
_serialPort.WriteTimeout = 500;& i+ L6 o( G/ x% g/ Y6 Q# }
//打开串行端口
$ A7 {4 r2 X& O4 l' r- Z _serialPort.Open();
* O: _* ]# X0 u/ j }4 l0 A0 a3 X, L: \
catch (Exception ex)% v: B# ]+ ?' O1 Q4 \
{
( k! }& D- k8 `/ g Message.show(ex.Message);
9 ]9 ]( j8 [( L( J" D }; c7 y2 [8 P( e. i/ U7 R
}8 f% Z2 K6 L, q! J
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
# v5 ~/ _* q- p7 j) S3 Z 按键命名 提示内容
7 i: Y. [: D3 z Q+ `: H button_PLY 播放
0 k/ o8 E A+ q) n$ i button_STP 停止
- Y* s3 u0 j {) {1 o button_FWD 快进( J- N2 b+ w5 r" ^' s5 y* I1 D
button_RWD 快倒
9 c$ w0 y F3 ~4 C4 u, z button_RCE 播放: S# [& b+ W7 k' M
button_RTM 清零; }7 J1 a7 L) |5 @: S* ~
button_ZLO 定位到零" |4 a, A4 j* A; ` U! U! W( _1 r
——双击按钮图标增加按钮处理方法(以录音为例)/ [( G z Z" A/ a+ |) ~4 v
private void button_PLY_Click(object sender, RoutedEventArgs e)
7 c" y x3 K3 c( x {4 d/ a$ M0 B9 B8 @0 B8 |# Y
try
; \6 j5 O0 u9 t# y {
" l, ]1 p; G$ W+ }# O/ D6 P //发送从输入信号直接输出方式控制字符串
$ g, V' y! e4 Y. Q o+ c! G5 k _serialPort.WriteLine("INP F ");* U0 f# [# {$ X7 i3 O8 `6 v( h
5 s: N" ^: s; E t- G //休止100ms
) j% }, C1 ~3 \7 s4 Y) Q/ ] Thread.Sleep(100);
+ M) Q/ f$ [2 }- m( c- f //发送所有通道Ready的控制字符串
2 M7 H8 S1 E+ `8 {1 o1 x _serialPort.WriteLine("REA F "); ! E3 o) S% `; T9 \/ J: `" h
Thread.Sleep(100);
- }7 r0 I9 i! N k' _$ k //发送开始录音的控制字符串。) k, d4 U! B2 x9 e k
_serialPort.WriteLine("REC ");6 h; @' n' Y6 _0 g; D& {. h2 ~9 P- k
}
* w, \+ L# S% |/ k catch (Exception ex)
& J3 r6 s7 S4 K/ O1 c! { {
: ^* r$ q# f9 r5 x* j7 Q Message.show(ex.Message);8 o, F4 B2 N- M3 Z* z- \
}
. V9 E$ A2 `6 |5 h }0 Y& ?9 L" \- f4 `+ ^
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
/ k" x+ x; `# }) B* I- W6 \ 按以上方法增加相应按键的处理方法,并发送对应的指令即可。8 ]/ ?5 c3 N3 i- `8 ~7 R0 e$ c# X6 d: A
播放控制字符串:PLY+空格+回车
; A( ^( Y/ |7 i3 P4 ^" Q! L7 } 停止控制字符串:STP+空格+回车1 P+ H8 {4 B6 u) I7 f
快进控制字符串:FWD+空格+回车5 m0 o/ V' {1 c+ _3 o. U" Y
快倒控制字符串:RWD+空格+回车7 T# _8 X! K# o) @& C
复位控制字符串:RTM+空格+回车- F3 R5 J: J! b+ r M, z" Q5 {
定位到零字符串:LZA+空格+回车
4 u7 e6 G8 u) E0 Z Z m
4 \0 ^/ Z" q/ n- H4 g% {) m! H7 v 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
' s' u% K$ a( \; d/ Q6 D / D/ Y) q" a( X0 c1 P
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
3 j5 F! H7 y6 H0 y, O+ B& T |