第五部分 控制软件编写实例% X' t3 o' i( `
' V Y, }% l* S4 U5 S: E 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
3 [# k5 }. q! x& W. c; ^ 1、开发环境
# b/ W6 h1 l5 l+ W. X 编译软件:Microsoft Visual Studio 2010
% x7 F4 B r) J- l7 g: x 基础框架:Microsoft .NetFramework 4.04 _$ Y2 o4 q" {0 }* E2 Q# w: u
程序框架:Microsoft WPF7 Z1 H* H- T3 V/ E
编程语言:C#
7 e5 k7 p6 i6 F" v! q 2、实例功能; _* z# W" v3 [
——播放功能
: U' V+ j, a9 m& p ——停止功能
8 s3 o% c! J8 x; G' G' h ——快速前进功能* F ]5 I" Q0 w3 I7 c
——快速倒退功能$ {/ G3 k1 ^' f
——录音功能3 p q9 D2 {6 F
——复位功能
8 H! ~2 F' ~. M$ U `& x+ E& V ——定位功能* I. [. A4 h" ?) i
3、实例代码9 g& e" Q o: t/ P
——在Visual Studio 2010中新建一个工程文件。- I6 @3 X" Z8 b& G! x; s. b
——在工程文件中的窗体代码文件中添加IO端口的引用。; s2 X3 u' i$ Z t
using System.IO.Ports;
5 Y* O4 D3 L _& ]% `0 K- k" N ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。) V' ~+ N0 r8 l! Z. @
static SerialPort _serialPort;( @2 D9 ~6 E/ _8 U# i% e/ l& @
——双击窗体增加窗体装入事件处理方法
; k$ r; A* l+ {2 e1 O9 _6 i m private void Window_Loaded(object sender, RoutedEventArgs e)9 h5 U9 h t5 M% {( M
{
6 {. M2 {; j! Z3 P }
) W9 I! k) y0 }: @2 L0 p* S 在窗体装入事件处理方法中写入端口初始化的代码。
/ q1 W# Q4 g/ D private void Window_Loaded(object sender, RoutedEventArgs e)1 c0 z& B: S, K- D" Y% Z
{
; w Y% S0 M: O6 A/ V8 ? h; ^ //创建一个新的串口对象实例
1 S7 x& i6 K5 h _serialPort = new SerialPort();
- Q0 n* b& p+ Q$ V //枚举计算机中的串口+ |$ d' {& E' @3 n4 j( b" m
string[] ports = SerialPort.GetPortNames();
9 {% k: T, |0 [5 m( O7 W9 t/ g //如果系统没有串口装置则退出# t0 K2 k! {2 S& h6 z% K K3 D
if (ports == null): r4 a# |5 W9 i7 ]
{
; {* A! Z! m& T/ c* f this.close();
+ U5 Z I7 l" H& I }4 l5 V9 W& o( X% ~6 p
try" I& E( w0 q8 l' ?, G! K
{0 x# u5 J6 M6 N6 D
//使用系统的第一个串行端口
. d" d d$ }3 | J, r% y; a& ?; L _serialPort.PortName = ports[0];
; ]8 m8 i7 t, T6 C //设置为9600的速率9 x4 k7 Q1 u2 C' O+ ^
_serialPort.BaudRate = 9600;! y R0 d: E v
//设置为无校验7 b$ C% H' R+ t& \- O+ M# u
_serialPort.Parity = Parity.None;4 E" A# W3 T, Y, \; I
( E0 w$ _+ C- M) F) }. {+ V6 g //设置为8位数据
$ \/ p' v1 h7 r& x _serialPort.DataBits = 8;1 i" s) u4 n( c" `8 W; f' r
//设置停止位为1# [6 E/ C* d- F
_serialPort.StopBits = StopBits.One;' b: X# r. s5 c6 x, r
//设置为无握手
2 T4 i& f, d) H1 C" q/ o _serialPort.Handshake = Handshake.None;% O2 t. h8 X+ ?3 q9 \ ^
//设置读/写超时值
+ y, t1 O8 c3 V" C* A) } _serialPort.ReadTimeout = 500;' [/ o, A0 z6 `' h, M o
_serialPort.WriteTimeout = 500;( `0 u1 R& B6 I/ c8 t
//打开串行端口- x$ B$ ]% P4 Z/ X2 ?8 e H
_serialPort.Open();
5 ?+ S# \7 Y6 o- k0 r. c" e& n* d }
7 C8 h1 L8 |* S0 F2 N4 w6 k: t catch (Exception ex)
: e, |) w# E( r; v# b( T( I {
5 W+ V. Z8 {$ k( ]9 t2 ~# I! |* R# m$ ? Message.show(ex.Message);5 l/ a. U) J2 g6 B. f, J5 F, b x
}2 g2 Y. q) y4 `) o/ K+ M, Y
}4 K; X2 t5 S+ r
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
1 q- a. H) w2 i: v, @: g5 O 按键命名 提示内容
/ T( r9 N! g Y @& B$ j button_PLY 播放1 d& y% f. e1 W+ L4 g! P. D. N7 e
button_STP 停止
( z& H. l! y" T8 g) K button_FWD 快进" R2 b8 g ~# d3 k: I8 h; `
button_RWD 快倒; J$ k8 y' P6 d/ k7 G( F
button_RCE 播放. H1 z2 m% M a
button_RTM 清零
! H) G/ u$ H0 z, n) x button_ZLO 定位到零
" |3 |, J% }$ Y: R2 O ——双击按钮图标增加按钮处理方法(以录音为例)
" A' s2 ~' G2 g' g' Y& R5 {" f private void button_PLY_Click(object sender, RoutedEventArgs e)
2 Z) _$ G/ b; p {
0 X2 ]4 ], P# I1 e( s4 z' T try
5 w0 u S! x2 L c* X {% _7 ~0 Z8 f' w7 m) b: N* o
//发送从输入信号直接输出方式控制字符串
) {% t) V+ q; c$ t3 ~3 x _serialPort.WriteLine("INP F ");
8 T+ U) g4 O: R: C2 z2 o! y5 P/ G" i & B" F5 L& }) W. p2 B
//休止100ms. [6 n4 E$ Y9 x
Thread.Sleep(100);
n/ H& F; |9 q( v2 O //发送所有通道Ready的控制字符串) j: d# t( F' d4 y) ~
_serialPort.WriteLine("REA F "); + }6 ^5 ]: t! N7 B
Thread.Sleep(100);
" s, G M W+ p" `" }( f" G //发送开始录音的控制字符串。
) [! ]# j9 X; ` [0 a O `" h _serialPort.WriteLine("REC ");: V1 V/ }5 o8 }% r- X0 X+ G
}+ L6 k, Z+ @7 J% e. b+ K8 E6 t
catch (Exception ex)
2 ]: Z5 ]+ R$ i4 r3 s% w/ E {0 T; {4 j% i# p; ^0 Y
Message.show(ex.Message);
1 e" _: E" i, W }
% e5 a8 s* Y; o6 K; N# P }' K2 o1 N+ `) A) e0 E" e
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
9 l3 l8 q2 v H/ V 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
/ t' o- }& ?5 ^ T 播放控制字符串:PLY+空格+回车
& S' J0 j. b4 X( ^+ L- y 停止控制字符串:STP+空格+回车
2 E& m' i. m0 C% Z4 l* r, z 快进控制字符串:FWD+空格+回车
' M& b- ~5 C5 a7 @) e 快倒控制字符串:RWD+空格+回车
5 b, ~! _7 u' e+ F9 W0 s 复位控制字符串:RTM+空格+回车
$ |0 \& i+ V4 F4 \) p; v. ~ 定位到零字符串:LZA+空格+回车
* n& R' D: D- C( t
& M/ Y w% ~! h( h' I0 ~8 H 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
4 G( q$ n$ k0 u7 b& S$ J+ W9 V
2 k6 F$ L- \# m7 x j( d 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。' t* s) n$ g6 T6 e4 @9 |0 i$ w5 ^
|