第五部分 控制软件编写实例/ H6 D) D( f" W ]
7 Y \3 d% l3 R+ I6 i 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。4 ~* [. n, j* c5 Z& w
1、开发环境% s7 ^( H# h& c F1 S0 `" |/ ?
编译软件:Microsoft Visual Studio 20107 a: _7 _# u4 a" Q
基础框架:Microsoft .NetFramework 4.0
$ E0 s) o, b: z5 `: ~) j. I 程序框架:Microsoft WPF9 d2 F6 {5 y; n5 Q0 ^1 p
编程语言:C#2 @$ C* m/ }2 ^3 Z
2、实例功能
3 T# V4 w2 a* [7 O7 D9 R, e ——播放功能/ p6 A# e) l6 ]
——停止功能1 C2 ]( G! U) ~' N% A
——快速前进功能' ?& O: B& p" t9 G: B. u7 G
——快速倒退功能
# j9 Y" {8 b7 b, b ——录音功能! K+ J7 [* l0 L6 ?, B
——复位功能1 K, E7 n6 N& ~ W! t b+ Q4 |
——定位功能2 J% c( ^2 ?2 m( G: P
3、实例代码6 q! q r# ?0 F4 o: |
——在Visual Studio 2010中新建一个工程文件。% A: m9 D! C/ Y7 u
——在工程文件中的窗体代码文件中添加IO端口的引用。! c/ @3 f. z( X( J
using System.IO.Ports;8 H9 T9 I* Z1 G7 V
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。& U& f: @( n. T) a4 y7 n( {
static SerialPort _serialPort;
( z7 r# v) x+ h6 M7 g' \. B ——双击窗体增加窗体装入事件处理方法
4 c Q1 v) y* A# s& S3 b private void Window_Loaded(object sender, RoutedEventArgs e)
* B( U1 g0 q" z! `3 m {# M) }2 b4 _. i) U# O5 B$ g- |; b
}4 b& |4 R( K# R' O7 _; a
在窗体装入事件处理方法中写入端口初始化的代码。
# l2 d0 d, n( D private void Window_Loaded(object sender, RoutedEventArgs e)
! Y) W e1 l: Z2 F0 R {4 ]& q& W) D9 d
//创建一个新的串口对象实例
( t* U3 |& x( _0 ]# ~3 { _serialPort = new SerialPort();7 Z( g, C4 ?# I6 \4 M$ q! n
//枚举计算机中的串口
% p) O: x' A! \ string[] ports = SerialPort.GetPortNames();
( Z% J: `/ v5 X //如果系统没有串口装置则退出2 e. v5 o: G4 q3 k3 s
if (ports == null)0 ?# z P& I ^1 A3 Z- z
{
$ o4 ^$ u! L U8 B$ V- o; I; X. r this.close();5 U- t2 Z/ q. \
}& }' X5 v9 p; k
try% p- e3 V% h: f
{
2 r6 ?& B' C4 ~ //使用系统的第一个串行端口' @! P4 i) T g, ^) _
_serialPort.PortName = ports[0];
7 I' j. J5 g; f- `2 N9 K" E! r+ B' [ //设置为9600的速率
* H$ G# e; c; j( A& ]/ I, Y _serialPort.BaudRate = 9600;
8 Y* B- f0 I0 w# i* v5 q //设置为无校验
+ e& M5 k% {/ A3 U4 v5 _: r _serialPort.Parity = Parity.None;
8 b4 G; q1 u* A ^ x, a, ?8 Z2 q 2 }0 r% Y; `* r1 @0 o* g
//设置为8位数据& O& H. r1 G. ~' J
_serialPort.DataBits = 8;
3 `( a6 h7 L/ ]2 m2 f1 t //设置停止位为1
- b1 U$ z" o/ B _serialPort.StopBits = StopBits.One;5 X# k8 W g }" k& B* @) B2 ?
//设置为无握手1 C0 X. i3 ]$ K1 ~4 g8 n, [
_serialPort.Handshake = Handshake.None;- ~6 t3 b! R+ j( {# L" J1 g
//设置读/写超时值$ x1 {$ l* {# b: ^" N7 r/ V
_serialPort.ReadTimeout = 500;
" q f1 m1 F: F( c6 [# Q _serialPort.WriteTimeout = 500;6 f' V9 U6 _2 M: L0 a
//打开串行端口* \' W6 P* k# M
_serialPort.Open();$ D7 E9 P' t% N
}" \$ i7 a, |& M; c% T
catch (Exception ex)
% K9 e# Q* ~% c# |: K {
& W% s0 Z4 S0 n& R) Y Message.show(ex.Message);
+ M" @: K4 h I: C; Q# @# |; C: y }
E7 [5 B6 d3 s8 @' i& ^ }8 I- M9 G2 X, \% n
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。" B' E' W# ^% D% y
按键命名 提示内容
) G& ?- K1 {/ z! `4 Y button_PLY 播放
% e2 Z. a: c. V) y& b6 \ button_STP 停止
' n2 B) V1 F5 G) Y3 c* N button_FWD 快进3 i2 B! Q* }( {4 J( j" X& z
button_RWD 快倒! y' }. k! j% C8 } Z" {5 l* U3 P
button_RCE 播放* l3 T) U" P- e% [$ ^: c
button_RTM 清零) h1 N5 s( l7 {9 ~1 L
button_ZLO 定位到零
) e8 w) n, }' C: J1 Y ——双击按钮图标增加按钮处理方法(以录音为例)
) R+ w5 x9 O- q' n$ [ private void button_PLY_Click(object sender, RoutedEventArgs e)
4 O( n3 g" O3 l% H' x- \ {8 G5 t! g0 E! {; T: M- P! j [
try
6 U6 h: F& s2 S2 e+ G/ C. k2 ] {0 C# q! H5 ^; H4 h5 r- q k
//发送从输入信号直接输出方式控制字符串! k5 g5 t L1 j$ \3 M4 E& z
_serialPort.WriteLine("INP F ");
2 Z) z- y+ U" w* k' R / |* U/ s9 z* q: s6 I4 j1 g
//休止100ms
1 j8 h9 `, M( O" C Thread.Sleep(100);. ]: G7 R x3 c0 }/ O1 t
//发送所有通道Ready的控制字符串
0 ]. C4 g- D6 _" ^* ?$ B5 {, f _serialPort.WriteLine("REA F "); - ]: z2 C! d" p: T9 A
Thread.Sleep(100);
* M$ a8 v1 u% ~9 o: P' V. H //发送开始录音的控制字符串。
3 s F* `+ w U" ^; B z& k5 | _serialPort.WriteLine("REC ");# I; @9 i7 H6 p' {! k6 ^
}
4 q! z/ r7 J' v8 N0 r- z catch (Exception ex)5 A" c% v5 \. A2 h
{
- o, }' I1 A- g( R2 e Message.show(ex.Message);+ M. ?$ O4 o( \ d/ S
}4 P; r3 {% ` D' z& L
}" ^" j* ]1 j5 ]
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
[7 V6 R( a8 z% j: l3 A K 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
0 B! C* h9 [* v: N I8 \" b' Z 播放控制字符串:PLY+空格+回车1 @9 V' j8 M) v4 i0 N4 |2 S
停止控制字符串:STP+空格+回车$ I$ @5 M0 b6 b/ Q9 Y6 j
快进控制字符串:FWD+空格+回车
: ~2 V9 t' u8 P& U5 \ 快倒控制字符串:RWD+空格+回车
8 x6 r) A$ o3 C5 d& M6 Q. x0 P& E 复位控制字符串:RTM+空格+回车
! e0 j/ t; I9 K4 w& C" l 定位到零字符串:LZA+空格+回车 O9 i% I4 q/ \8 `! v, _' H
5 W. P# e/ P$ R1 Z" L' F 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}* g2 ^4 _4 O* ^' O' d
+ V4 q1 @3 |3 O9 w& V; V4 }: i- q3 _$ ?4 b
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
1 a; `7 @! q- |- n |