第五部分 控制软件编写实例6 \% A, m( G9 }
/ v$ ]0 m4 T1 _" c2 o; t 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。' m3 J/ o. _( J0 e
1、开发环境
6 T% X! a6 g0 i8 y/ d, D& w 编译软件:Microsoft Visual Studio 2010
: Q+ Q# g$ h Q7 }( ^ 基础框架:Microsoft .NetFramework 4.05 ?/ S2 P9 s, j- L: h; E5 ] d/ x8 o
程序框架:Microsoft WPF
) @5 I3 E: r; ^& e, J 编程语言:C#% M$ q/ F: n6 Z# Y+ w7 @3 y
2、实例功能& f! }# t8 p1 W- g0 Z- a3 K
——播放功能
: v$ [3 f/ o7 ?$ P5 ^ ——停止功能9 I9 u$ T- R {4 t% R0 d" S
——快速前进功能
6 y8 y6 n- ~% q( f% l ——快速倒退功能; `* ]% |2 @; g* W$ J1 e9 @
——录音功能: k8 ?/ {3 ]7 ?8 I# p: ^
——复位功能7 z4 D# G' e9 Q& w" q4 D
——定位功能
: p% [5 {% F* L" p) m7 j/ k9 A$ | 3、实例代码 {. b% L% Q- S) }1 v
——在Visual Studio 2010中新建一个工程文件。
/ c, @( |, |8 E ——在工程文件中的窗体代码文件中添加IO端口的引用。
- }! W4 r- C0 b/ B using System.IO.Ports;) y! |) M% H6 A: a" z( o
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。+ }) b' F3 v7 ]( r4 O" w: c
static SerialPort _serialPort;
' y3 [1 }, ^! b ——双击窗体增加窗体装入事件处理方法
+ R4 U4 n2 I8 m; u private void Window_Loaded(object sender, RoutedEventArgs e). r9 O4 r0 g/ e1 j3 L+ ~
{
; Q8 } s# s# X; A }! o8 z: w2 `1 W0 A
在窗体装入事件处理方法中写入端口初始化的代码。0 q* T+ Q+ L: ?0 t/ L8 e( }9 p
private void Window_Loaded(object sender, RoutedEventArgs e)
9 e) i s! `6 B) h {" t0 p( `! M: c% @ J
//创建一个新的串口对象实例9 }5 t% s, w$ N+ c
_serialPort = new SerialPort();9 h6 i; d1 j1 v) O
//枚举计算机中的串口
. X2 m$ o- e( z, s+ O1 J2 F# x: _ string[] ports = SerialPort.GetPortNames(); e0 d% T0 y9 a
//如果系统没有串口装置则退出4 x( d* |; U m% F* `" Y- R$ E7 c
if (ports == null)
/ P* e" g: J6 s1 I: v {
4 B/ A/ ?: r( o, g# C' S* _ this.close();
) Z& I" `7 p- ?& [+ Y3 f }
% G9 M; r$ J) a5 I0 b6 B2 X try
3 d9 O3 r7 V$ R8 F/ w {
* _0 L) L; C; l+ N1 H //使用系统的第一个串行端口+ D8 w1 c. A( O( [* c7 u) o3 g2 p
_serialPort.PortName = ports[0];
$ p5 X _- `. J. M. i //设置为9600的速率
( z, }) H5 }% _3 k; G# o _serialPort.BaudRate = 9600;
$ r' L" T, x, I1 |% @. @2 S //设置为无校验! ~) }; X, C$ m) c% v% v1 @
_serialPort.Parity = Parity.None;1 J2 J7 c; A5 X' b; L) d2 C4 c
$ u. S2 [( E/ B4 ~: Q8 i //设置为8位数据* p0 P, w4 H( {; o0 d
_serialPort.DataBits = 8;
3 e* N8 z" x3 a: a( y0 Y6 U0 q //设置停止位为1. {& B4 r; u7 d& f
_serialPort.StopBits = StopBits.One;
' x5 L0 L, k9 X- A* W //设置为无握手* A5 |! g& E h7 V4 K0 _. F
_serialPort.Handshake = Handshake.None;
3 Q4 K0 ]4 ?4 n6 P4 B //设置读/写超时值
2 c' F1 i. L8 |$ }" l* v _serialPort.ReadTimeout = 500;; V9 H' i/ O: Q
_serialPort.WriteTimeout = 500;; ]) c0 F1 G4 G
//打开串行端口, p7 C/ X6 [: Q
_serialPort.Open();1 h# f& \3 _1 i8 z, p
}
2 {8 D, M9 C1 Q% h7 I1 N. Q* M, d catch (Exception ex)
$ B& S- x+ p+ ^0 L/ A9 i6 q {
! |. Q9 s# N3 Q. Z Message.show(ex.Message);% z- F" |4 p: U; T
}
- d1 o( M2 S: U4 B( h% J& A }
! L7 U5 I5 r! N5 k# p ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
$ C, ?3 v3 {" |' w' J) g 按键命名 提示内容
% E4 `' I( _& i7 t% @1 ?/ ?& } button_PLY 播放
0 r, ?8 P. e3 v7 a: \6 R button_STP 停止
$ Q, G" q! r( L; |1 D& j- y0 K- h button_FWD 快进
K6 [8 u5 v, s5 h) b% |) F0 z button_RWD 快倒3 L% }4 ]: {* Z3 }& L1 S
button_RCE 播放+ i, V, |: C9 x* h: u8 f @
button_RTM 清零
% K2 }" Q! `. J9 ^5 K$ d) h button_ZLO 定位到零. e- G& [- O$ l- _! Q4 |
——双击按钮图标增加按钮处理方法(以录音为例)
# ]' Y) l1 } p" x1 V$ A private void button_PLY_Click(object sender, RoutedEventArgs e)! g b9 j; S8 C& D. i
{2 E% |. J0 a1 Z9 }5 C
try
. y; i& h9 @' h! o {
4 H, O p, g3 B4 b; \6 \7 S //发送从输入信号直接输出方式控制字符串8 c0 g( Z5 x" I8 R9 q, O
_serialPort.WriteLine("INP F ");& t; b6 t, g& m# z1 A# S a6 ]
$ d& a; ?) H4 Q; I8 @ //休止100ms
0 Y8 ^$ {* e( D5 Z3 g, P8 N( w# x Thread.Sleep(100);1 ]* U! q0 O" w0 m6 F
//发送所有通道Ready的控制字符串
( M- `$ t0 H0 i& u _serialPort.WriteLine("REA F ");
7 N8 g6 z# w2 c, F* n Thread.Sleep(100);
$ Y3 @; |3 H; s. e9 V5 @4 Z //发送开始录音的控制字符串。
1 H8 `& f9 Z% G4 A( L! u ~ _serialPort.WriteLine("REC ");
* n: f8 z: z( W2 _6 E* [1 h }
& E! y* ~6 y. H; Y( z) l6 [ catch (Exception ex)1 k7 q4 L2 L8 j
{
. [" I C6 a) T1 f9 E Message.show(ex.Message);
6 @# M% f& z0 b2 e2 j& _ U }
6 l# M1 k: y) B$ i8 `! d; E }: ~8 v' a" a; o0 h0 x% @. M9 M
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。& a$ ?1 f, g3 G
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
6 P/ r% i3 Y5 R' v" C$ @ 播放控制字符串:PLY+空格+回车8 p0 W% ]4 u: y
停止控制字符串:STP+空格+回车
% j8 R8 ~- S$ Y# ~8 J 快进控制字符串:FWD+空格+回车
/ h9 R) m2 a4 G: a/ h) A. ^0 |7 c 快倒控制字符串:RWD+空格+回车
0 s* Q4 y, u2 b' R3 n% U 复位控制字符串:RTM+空格+回车
a+ P0 _& i1 O9 b" D( ?% K 定位到零字符串:LZA+空格+回车: u& r& E- k, g1 G( V
& N0 \8 g7 H( O0 d) a: j 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}/ g4 u% P; g/ p2 n8 H: v$ E* Z7 k X
2 y+ m2 L+ E% z B) i 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
1 T5 s: f' g+ \2 [! h/ E |