第五部分 控制软件编写实例0 H6 j4 Q% j# F
: z& ~! k8 T7 z, x. e. ]
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
: q- B2 Y1 L+ l. s 1、开发环境
: d0 Z* h) f* y- v, x6 E+ p6 M 编译软件:Microsoft Visual Studio 2010
# m; \% p4 B$ w. w' [" ?9 { 基础框架:Microsoft .NetFramework 4.0/ k; q9 Y/ y- K" n) L
程序框架:Microsoft WPF& l# G" C4 I) E% J
编程语言:C#
% l$ L0 E# Z, ^$ x7 I+ @4 Z: _6 ` 2、实例功能
, C: i$ T" e/ K3 V6 k6 M ——播放功能; k* M% H/ s8 [4 z
——停止功能& D. C' k3 b+ \+ A U. T
——快速前进功能
0 V( t4 O; n& Z9 M) U ——快速倒退功能: y! `/ _. J3 j1 j% i$ s
——录音功能
, k2 n" l3 D% S1 h/ p! t ——复位功能
* B* t" b# M/ g0 d& k8 f v: y ——定位功能4 D7 D& a0 u" Y- X! {! e
3、实例代码' @( u+ z' `/ j
——在Visual Studio 2010中新建一个工程文件。
5 g$ ?$ Z3 U7 B1 D" a ——在工程文件中的窗体代码文件中添加IO端口的引用。, r7 Y, {& U5 j' S3 c+ j7 ]
using System.IO.Ports;0 b- W. P/ r1 z8 t. {
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。1 [3 r" H4 _3 s
static SerialPort _serialPort;' J) [3 e+ Y* @2 d* G) k- {
——双击窗体增加窗体装入事件处理方法
1 }2 w9 | B- r6 k$ g private void Window_Loaded(object sender, RoutedEventArgs e)& l5 W: S9 T# B8 v
{
1 U0 f! l( x6 [ t! P# ` }, j! f. Y& e2 h& Z6 I6 f8 T# W2 n: ^0 t
在窗体装入事件处理方法中写入端口初始化的代码。
! P$ p, x" }8 r% x- I$ n% D private void Window_Loaded(object sender, RoutedEventArgs e)2 W% y' }# B) e2 M
{+ L0 j' H, `( H& k/ M1 W4 y/ G+ p% e/ m
//创建一个新的串口对象实例" I& ]( j4 J' U, m
_serialPort = new SerialPort();
) T+ Z1 m+ N, A. A l0 u5 [ r3 f //枚举计算机中的串口. X0 j$ H( O8 @" L, H( u
string[] ports = SerialPort.GetPortNames();
1 T! }' h3 m( b% M. v$ b //如果系统没有串口装置则退出
5 S: |; v& F' ^ if (ports == null), e. j! s6 Q, g+ F. R, Z0 a9 O: u
{( S* F/ B% _# ^1 {4 J
this.close();
/ D0 s6 c2 E$ H! Y }: w$ m9 ?* `0 e5 r) f: D0 D1 u
try, @5 l+ A: E( y/ b" g7 c; l
{
. b% P8 [1 U( E5 F9 i! b1 A, D r //使用系统的第一个串行端口1 J0 F3 r" w" r
_serialPort.PortName = ports[0];
6 R% O: m3 v! W% F4 } //设置为9600的速率
! c$ \* w* A1 Y3 t h5 V1 P1 L, T& ? _serialPort.BaudRate = 9600;
6 u# W! x' ?( ^) C- [$ R //设置为无校验1 E$ d$ T' ^- l" m9 }& g
_serialPort.Parity = Parity.None;; o! a: e4 }5 f3 e
6 ?8 {% j, i7 J1 }+ A0 p3 Y2 R
//设置为8位数据1 t) J# ?$ }9 h2 H
_serialPort.DataBits = 8;% R# r/ s( |4 h% S, {, U
//设置停止位为1, ]/ \- z5 P; c
_serialPort.StopBits = StopBits.One;
N2 P- q, s! S. w5 T) ^ //设置为无握手
' k$ N/ b F7 z: c( ? _serialPort.Handshake = Handshake.None;8 ]' F3 j8 h% x* w5 \# f
//设置读/写超时值9 x6 F3 }+ R+ y
_serialPort.ReadTimeout = 500;# N A( \- `4 m+ O$ z
_serialPort.WriteTimeout = 500;
# z$ _7 f7 w3 Q; r$ v& g, p //打开串行端口
/ M6 w3 p7 c2 `/ `0 V _serialPort.Open();5 V! x' F$ {: p5 q, S$ `
}8 O/ f, [3 G4 M/ H) U
catch (Exception ex)
2 a2 v c! ~$ F" U/ a$ K' z {" @& w7 B: k7 A+ _
Message.show(ex.Message);0 y" w% Y& l3 R G) z" h
}
" `% H+ Y2 i7 x: K+ b5 O K }
6 {" X% D5 P- G: ^% T ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
- ^! Y: e: g! g# j 按键命名 提示内容) P9 }8 Z, i; U# ~8 A9 |, f
button_PLY 播放9 Z' y& @$ @7 H& a( g
button_STP 停止# g, A& `8 v+ ~1 P2 ^# f7 d
button_FWD 快进- o! C, [$ |: T
button_RWD 快倒
8 W' H. Z& g8 F# r button_RCE 播放
2 w M G* }7 c! Q1 ? button_RTM 清零/ E4 t5 f( q# K: x; b7 {& Q4 f
button_ZLO 定位到零' l* {* a( p7 [
——双击按钮图标增加按钮处理方法(以录音为例)3 g7 b" J( d/ l5 f& G; \
private void button_PLY_Click(object sender, RoutedEventArgs e)
+ t7 N: V; ?% D. c6 D5 b {
% I: L1 W" m- z( v try
1 E: m3 t5 T- c) d {9 @2 ]: I- X) k
//发送从输入信号直接输出方式控制字符串
0 m& l/ e6 ~ h( O9 c) ]; Z _serialPort.WriteLine("INP F ");. M0 n4 e& I( g' C: {
% @8 K6 K. Y2 g* N* e //休止100ms
- R3 L: B' i3 z" R Thread.Sleep(100);0 L# E" |- s! [6 x! v) z
//发送所有通道Ready的控制字符串
" Q5 w# R! g( ^9 h; r& I _serialPort.WriteLine("REA F "); 5 k% e. x- k. R: D& Z
Thread.Sleep(100);
8 g) r* P) y) g. } //发送开始录音的控制字符串。9 u, n/ c' _$ Z4 `; n5 b2 I$ M- Z
_serialPort.WriteLine("REC ");8 o$ w/ \4 b8 I/ x; v
}
' n: v. c4 V* z- j" l catch (Exception ex)
0 P* ~2 X3 r r( o$ Z; l( I+ q {
- \! S8 z R7 G Message.show(ex.Message);
3 Y3 i, G% ~ w' Z2 H0 r$ h$ J }
, G' E' ?7 Z G }
U8 h3 c0 ^' b" @+ L 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
" O( C& C" Z* M$ }7 _1 e1 ]. N 按以上方法增加相应按键的处理方法,并发送对应的指令即可。0 [0 q, Y& |# Q) x: Z
播放控制字符串:PLY+空格+回车( } i# x1 \% K6 T1 j! K
停止控制字符串:STP+空格+回车
9 O2 c$ ^8 X6 T$ } 快进控制字符串:FWD+空格+回车% F" x0 V! G( ~; G
快倒控制字符串:RWD+空格+回车
# b% j7 I/ m3 s0 p; [# _ 复位控制字符串:RTM+空格+回车
0 e1 p/ N, k& O6 o+ Z7 t' Q) M$ V7 f3 ] 定位到零字符串:LZA+空格+回车3 E( {: }) Q' T; M
2 @9 i, s4 \8 v& o2 p% l
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
1 v6 u( D# X' n
$ F# i( R) w: {1 U 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。6 I% b2 `) Z7 z. E9 C' d
|