第五部分 控制软件编写实例" Z m B; |) l
; R% e' j+ ?, z3 p/ y4 V
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
* R2 g1 w: Y# M2 r, ` 1、开发环境
! ]: E7 ?8 q |8 s1 D, o ~0 Q 编译软件:Microsoft Visual Studio 2010 o3 o0 b# W& @3 e' v
基础框架:Microsoft .NetFramework 4.0
" d& V, e3 Q- Z! s' C8 e 程序框架:Microsoft WPF) L: M u% ]7 B/ `6 E- O% z
编程语言:C#- R7 X8 V. f! W( f Z; r
2、实例功能 z/ d8 G" A! Z1 A7 O6 a
——播放功能
+ r6 L% \0 U W5 V# ^- J ——停止功能 G9 I8 I3 t" s( m, e: b
——快速前进功能
3 l+ }5 C2 P' @ ——快速倒退功能
4 @& _9 R% o' w" n ——录音功能
% H- i: a3 ~+ {' q" K/ v ——复位功能. I- j" E6 Q6 p, d4 ^5 {" D7 X
——定位功能9 [0 x# H! I# w8 Y8 {3 j
3、实例代码
- z; ^4 S1 B! N2 l ——在Visual Studio 2010中新建一个工程文件。
6 K( q& A2 s7 L ——在工程文件中的窗体代码文件中添加IO端口的引用。' \8 `- D* [/ t1 u
using System.IO.Ports;; E5 @ W' m& g9 Q
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
0 Z$ z d6 r9 K4 u; ? static SerialPort _serialPort;
( f: p% R5 c, N5 V ——双击窗体增加窗体装入事件处理方法( N+ j+ q5 C* B _
private void Window_Loaded(object sender, RoutedEventArgs e)
# ~6 @3 U6 m N0 S0 w! j {- Y! `6 S# Y" h- E
}6 Q/ [; ?6 E, j8 U1 P
在窗体装入事件处理方法中写入端口初始化的代码。: a8 ?" ^ a0 l! l
private void Window_Loaded(object sender, RoutedEventArgs e)
* i) t! o; ]$ G! k( Q {
0 s8 b. W5 U9 ~& A //创建一个新的串口对象实例
: k: q' y6 a1 H* H3 N1 z# b _serialPort = new SerialPort();
4 N3 V4 [+ y8 D5 B& j //枚举计算机中的串口' h% U5 D! [7 O8 {& R( X/ @3 H
string[] ports = SerialPort.GetPortNames();
9 M. ^; r) k' c A' D3 Y //如果系统没有串口装置则退出/ I2 |. v: v( G# _8 Y7 u. {
if (ports == null)# |1 u3 P$ L/ o! y+ @% x! P+ N. U
{$ g; u% y/ y% c5 U l% l$ a
this.close();
7 ?5 }& h9 Q, V0 f7 d" w7 F4 ^ }2 x' Z8 P" {9 a: A2 u
try. G2 O) r$ c Q$ f" Y
{
. H N1 \" s }2 u% P5 S //使用系统的第一个串行端口& W7 E$ y! z$ p4 A X" A4 _
_serialPort.PortName = ports[0];
8 i4 _* `' z( z: J Y9 L9 v' ` //设置为9600的速率
! W2 T: l# }% H; u7 w) z7 J- M) z _serialPort.BaudRate = 9600; [; O0 [- P2 ?6 e3 O
//设置为无校验& C( p; Z% q/ g. K! _8 J; F
_serialPort.Parity = Parity.None;& K# [; b! A* u6 c- W
* x0 f6 m! x! P5 X; B, j! ^8 A
//设置为8位数据% ]' ]. R# x9 \) `0 w
_serialPort.DataBits = 8;
/ s; F- G' `* r. w% E) M( A' x //设置停止位为1, i) P9 b' q G* O
_serialPort.StopBits = StopBits.One;
% w. P5 K' f$ g //设置为无握手
* k, Y0 \1 _8 y8 n/ S _serialPort.Handshake = Handshake.None;
2 F v7 A$ y& }$ w9 `" w- P7 ?$ L( v+ h //设置读/写超时值$ Y0 r' X1 u" D0 H2 f2 t) ?
_serialPort.ReadTimeout = 500;
2 r6 q8 d7 b% q$ |% P& V) i l _serialPort.WriteTimeout = 500;
; z; r: L, m& h; l //打开串行端口1 s* @4 O6 k( |' ^
_serialPort.Open();9 l- T4 w; ]; H f5 w1 z7 l
}
9 f, o2 ~8 {: I/ D4 X0 ~ catch (Exception ex)0 V. V: T: f; I
{6 H; X5 k" n! U ? ~
Message.show(ex.Message); b5 _/ `" h' X# v
}/ d0 R$ _* ~+ _' A Z
}
/ Z& a4 x4 p/ u. D/ g! J1 r ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
; Q# l7 U8 p! q* I" a 按键命名 提示内容) O& u0 e# F7 Z4 R9 I/ W# t; x- I
button_PLY 播放6 O' k1 v. t) J* a l. {; `6 A
button_STP 停止0 p) }: @1 L+ F. Q% G2 P1 A' J. \
button_FWD 快进' k. `0 o% a; p: I2 f; J
button_RWD 快倒" u- v8 o [1 z
button_RCE 播放% x( l- R1 l u( ~3 }) F
button_RTM 清零
. D' w$ B! [' H- L( C1 y* Y button_ZLO 定位到零
% c& o( ?( n6 n Z1 J% c ——双击按钮图标增加按钮处理方法(以录音为例)
3 w. P, f# u& m9 `- P7 k( m private void button_PLY_Click(object sender, RoutedEventArgs e)
% y5 S/ y1 n! W$ e% }# z {
, K" j3 P6 h, t8 V- E6 Y5 H& A" k try+ w3 C7 Y- {0 G2 {
{& f: q$ [, w8 H
//发送从输入信号直接输出方式控制字符串( ~# e4 ?3 K$ g9 @. X; D& }4 p
_serialPort.WriteLine("INP F ");4 I) k: ]0 i1 F \8 m/ q e; B
3 d+ [5 N1 C* @ //休止100ms
7 n; g0 |: H- m4 Z Thread.Sleep(100);+ i# }& d( f2 l3 ~( b
//发送所有通道Ready的控制字符串
' f, }" P3 g2 E. K. B8 k, c+ x! f! ~ _serialPort.WriteLine("REA F "); 5 @. W' A; ~# b y9 W
Thread.Sleep(100);
' N+ c6 }& L6 M X3 N4 m! X //发送开始录音的控制字符串。9 n( c+ O# ^( O1 E7 d3 r3 m
_serialPort.WriteLine("REC ");
5 B% n, a1 A3 B5 C } U+ w$ U v+ O( U
catch (Exception ex): S7 S0 ]5 X8 N/ x
{
+ E! v) ^* N+ Y4 I8 L% Z. k9 D* {: G, q Message.show(ex.Message);
# E* Z. S3 |1 Z" d5 S }$ Q" n9 _' Q7 b5 f. a @
}
$ C$ M2 D& }2 o( s 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。8 L3 l+ z$ ?9 ^1 v9 c
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
% y, M7 K X$ {' e6 `1 }/ U 播放控制字符串:PLY+空格+回车
2 ]' J3 O6 J1 d/ A5 k 停止控制字符串:STP+空格+回车; N3 q/ v, W$ x2 j, `
快进控制字符串:FWD+空格+回车5 r( B$ p- s5 @$ a" [! n2 l
快倒控制字符串:RWD+空格+回车) ]( H! o/ z7 v+ h4 u8 k
复位控制字符串:RTM+空格+回车
( E; R0 |. C0 ^- @" d 定位到零字符串:LZA+空格+回车& d9 R1 Y5 L. }) a% e! t
6 i$ m: u- d, u3 Q' g6 |6 U: Z, K 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}. U* }' b# m: K4 H) [
2 `* B$ f9 }; F; x- v 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。0 k# M9 v& r3 x" r1 ~7 y* w
|