第五部分 控制软件编写实例2 g2 B- O6 T3 j& U
' h% Q( F- ~( |# ?2 D8 G$ |6 ^: c
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
3 l0 r* D4 x: I ?8 K0 X 1、开发环境- u5 Q+ a: z9 }8 r
编译软件:Microsoft Visual Studio 2010
" b5 {: S$ F) Z2 `$ P( O7 w 基础框架:Microsoft .NetFramework 4.0
; S6 r6 A% [, I2 G, y 程序框架:Microsoft WPF
- O1 G3 f0 B" a+ d 编程语言:C#
( i, f- V( @9 J. H* [ 2、实例功能
& f' @( i% |- L1 k* {. i2 H# d& G* p ——播放功能
m: _0 r% c. J/ m, f ——停止功能7 i' f9 N+ s) X! h' d$ ^
——快速前进功能! L0 }" }% v% U# q& i0 V7 t
——快速倒退功能
8 R) [7 }8 `9 S/ e& {7 M ——录音功能
$ X% P/ o, x: ^9 B( i ——复位功能
! M' A, A/ h* k& }; S ——定位功能
9 K8 h0 s$ d1 W 3、实例代码+ ~2 f# S% }. y4 U" F3 D2 H# I. f
——在Visual Studio 2010中新建一个工程文件。
_' g& E. o5 G2 H! j/ r( F0 x+ p ——在工程文件中的窗体代码文件中添加IO端口的引用。; `3 |- b/ u8 w9 `1 R% M
using System.IO.Ports;
* K4 V) g3 u: f0 l: ^ ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。, U8 S8 L3 E* g1 M; A
static SerialPort _serialPort;
! m. H9 |+ c. u& I# j5 y ——双击窗体增加窗体装入事件处理方法6 j1 Y% y( l0 C( U s9 }8 t
private void Window_Loaded(object sender, RoutedEventArgs e)
4 B3 N: g8 n, W( _8 M {
' G( M3 K8 e! b8 E }
: ^9 G& b, i8 F7 Z+ v) \6 q! p 在窗体装入事件处理方法中写入端口初始化的代码。& U# a1 M0 R5 u: j' i4 R0 Z$ l J
private void Window_Loaded(object sender, RoutedEventArgs e)1 z& ]4 _" T4 L
{
8 m( W7 B8 W0 f8 t( {% t //创建一个新的串口对象实例0 Q, ?! i: q- b* }& q. U- M7 e" O
_serialPort = new SerialPort();1 p4 |. I. R7 }5 r
//枚举计算机中的串口- J! V* q9 _3 Y* C- Q3 K
string[] ports = SerialPort.GetPortNames();" U$ s' U1 a- }, [
//如果系统没有串口装置则退出, c& ?. X8 G h
if (ports == null)
J! o7 O' A, ?$ b {
2 q4 s; P' M- d2 F' f! d: O this.close();
# h" R5 T$ m7 j2 k2 a; }; V }$ l, n- D; |, o! @7 m
try
: t" I' a5 f _; ?- A+ E {2 Q: T$ _1 v" O/ A2 m! P* |8 b- M! M
//使用系统的第一个串行端口( E$ ~- }$ M4 _/ s0 L
_serialPort.PortName = ports[0];) Z9 N0 K2 j" r0 v+ n! F7 P5 Y
//设置为9600的速率# }2 j4 c, M6 \% E) N K; R, ]
_serialPort.BaudRate = 9600;; J3 M& O# B& \! ^, c1 |
//设置为无校验% l: d( \, ^, n
_serialPort.Parity = Parity.None;
# q- b3 ~1 g: r. p8 S
' o( h: _9 `; l a, K //设置为8位数据: L8 c# E$ Y2 j9 j5 {) {
_serialPort.DataBits = 8;
: P8 ]6 z8 Z8 X2 R$ J/ o //设置停止位为1
2 V6 U0 y% d" r$ Q- J _serialPort.StopBits = StopBits.One;
- `) g4 |9 V" i //设置为无握手) O5 P. L; j" X8 f' U# u
_serialPort.Handshake = Handshake.None;1 y7 |$ t5 m1 P9 [# w
//设置读/写超时值
/ d- h) w# g4 {: J _serialPort.ReadTimeout = 500;
* I9 w) e1 z9 R/ y( [$ s _serialPort.WriteTimeout = 500;' ]5 ]9 i" X. a* F w7 p
//打开串行端口$ F r0 a/ M1 Q# u' N5 [
_serialPort.Open();. \3 `2 x8 Y a$ z0 v, m9 N& \
}
7 t, L; \6 ^& z0 v4 L! r- l" z) G catch (Exception ex)$ j" M6 q$ V$ g5 H
{
2 z0 R5 H+ l- _* U& A% _ Message.show(ex.Message);
( I! ~+ e# g" X; p0 v2 d }
3 V) U; ? H: X! L7 S }: |5 N1 U9 l9 y7 {' Z
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
: O% A6 ` S- {+ {# b e. J. y8 N 按键命名 提示内容
2 W: U1 w7 u D$ U9 j button_PLY 播放* h3 C# i/ ?/ ~" `
button_STP 停止
% {, h6 {4 A, s4 V4 I) c$ J/ U button_FWD 快进
1 V: B: L9 r' N button_RWD 快倒
: x+ x* \0 y% H# P. {1 P! `* ]* d button_RCE 播放
5 W8 C; `: z2 ?# q5 N! F button_RTM 清零
8 D4 J: x. D3 M- w- D button_ZLO 定位到零 O" E7 M1 n6 o+ U# b- k5 J
——双击按钮图标增加按钮处理方法(以录音为例)8 \' x8 c; e8 ]$ v
private void button_PLY_Click(object sender, RoutedEventArgs e)
$ s3 z% S0 q4 A, r% P {4 ]; R8 x' w c0 U" j. e
try/ _- k4 i% v1 I3 j
{
6 ?. f+ b0 S7 F //发送从输入信号直接输出方式控制字符串3 B- ~' X+ h* L6 {5 m& A
_serialPort.WriteLine("INP F ");, |; L, L0 ?0 O4 _: R
/ z( b' e# [/ o
//休止100ms
G$ n. K8 i" J0 K0 R Thread.Sleep(100);$ h- T/ P) c; V% @9 H
//发送所有通道Ready的控制字符串5 F1 j4 h& a" a, P( B
_serialPort.WriteLine("REA F "); * t0 W" X8 U6 s; h3 h6 Q5 x
Thread.Sleep(100);; w( z' i; i. K, Z+ [, d
//发送开始录音的控制字符串。
% |/ P: J8 R; r3 u0 U _serialPort.WriteLine("REC ");
$ k. l& E1 j2 H) F' F8 ` }
4 t; |) X# _( f8 n$ Y- b9 y catch (Exception ex)
- |$ g7 f! h' b; |1 V9 Q {
3 f- b$ E5 O8 n. P% B8 Z/ c Message.show(ex.Message);
! ?8 @ e- r2 r0 D9 ], r# i/ g }( {* I5 I0 ~: D4 O% N% w1 v- \
}
; l$ ^) y- R/ f: D 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。4 N8 [, R, `' e7 u8 N; ?
按以上方法增加相应按键的处理方法,并发送对应的指令即可。 D# g k/ I8 W* Z2 M
播放控制字符串:PLY+空格+回车
, ]% Y6 h5 n: f+ [ ]3 K7 @ 停止控制字符串:STP+空格+回车# R, v8 [" ]" V% m
快进控制字符串:FWD+空格+回车2 }4 z. u1 E# \' C; O
快倒控制字符串:RWD+空格+回车
9 ?9 O1 c& B$ q' r" @+ m; ^6 @; Q 复位控制字符串:RTM+空格+回车6 R2 D; e( j! Y' n6 H
定位到零字符串:LZA+空格+回车
* p' a7 ]- [! V$ A
& [3 m+ \% ]' | 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
} B" ]8 u# l# J { b9 t ! l9 q) Z P! F: M! A
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。9 T) u4 e1 h- k* t2 m& V
|