第五部分 控制软件编写实例
2 G/ w* d+ c% F. k( S0 [2 B! O9 H9 M6 P6 k' ^8 V C8 r9 Q
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
& G3 \; n+ n8 e% U# I 1、开发环境
# y( {( Y) j9 v0 ^+ X 编译软件:Microsoft Visual Studio 2010
8 V. b, O2 s" ]% }' z; o2 g t 基础框架:Microsoft .NetFramework 4.0# T' X7 ]9 g: G" B% g5 a
程序框架:Microsoft WPF
; n X1 Q# t; i: d1 M1 g 编程语言:C#
, S+ o# c; j5 |* g8 L 2、实例功能
. Y8 c1 u" I5 @) ?1 r/ G% ? ——播放功能
! U. F& k, Z) s% M x ——停止功能! {+ z/ O+ y1 V: X6 }: M7 X% U
——快速前进功能2 K, w1 k2 B% e1 X/ p
——快速倒退功能
( a+ K3 \: c7 G( G; s ——录音功能
! y# A, t6 f# M8 [) \; _/ q: I ——复位功能
' v8 p- ~) A c6 h' r( ~( ^ ——定位功能
3 V! f& [% P& h4 W 3、实例代码
% A, N. V/ Z; a% N ——在Visual Studio 2010中新建一个工程文件。
% ~; T5 U$ F; F- d" G ——在工程文件中的窗体代码文件中添加IO端口的引用。& S- [. w% R! e8 p/ K
using System.IO.Ports;4 N4 F' ?- ^4 X$ A
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。! F7 S" i ?. t: I
static SerialPort _serialPort;) D' v$ S! H5 W7 {3 v
——双击窗体增加窗体装入事件处理方法
. F: A/ |/ m& k private void Window_Loaded(object sender, RoutedEventArgs e)
" C2 J& e2 S* B1 B, x$ v5 W" j {
% M; p( Z" t/ u6 v, h { T7 D }
# F6 h) a, t2 B: O( w 在窗体装入事件处理方法中写入端口初始化的代码。8 R$ w5 l+ g* z8 o
private void Window_Loaded(object sender, RoutedEventArgs e)
+ D# i( g; R, [' @! o7 H2 y3 @8 E {, g& e) _& I6 ]
//创建一个新的串口对象实例! q* M/ k& }) ~; |8 N) z
_serialPort = new SerialPort();0 n T+ e* {3 O% A
//枚举计算机中的串口; h1 }1 t% `7 C5 v+ |( f& X, z
string[] ports = SerialPort.GetPortNames();
) Y6 d3 P9 b* V$ X: f //如果系统没有串口装置则退出, W# a; ]8 X/ | R1 X7 p N
if (ports == null)
7 u/ L: u2 Y! ?. b& b5 U% _ {
7 p3 z R& y# ]8 s- E3 L2 }% h3 d this.close();9 ~& p, D9 w) M; A
}
- O, \2 b/ j9 d8 i5 Z! r try
" ^" l/ n- V' D7 g {, P. F3 H l3 s( H* p
//使用系统的第一个串行端口
+ ?' W: _9 {5 e) i: p! _1 b. c" x _serialPort.PortName = ports[0];
7 a, {; [" j+ w //设置为9600的速率" _7 \* K* b, U4 ]
_serialPort.BaudRate = 9600;
! T5 G) M5 L2 f0 H! | //设置为无校验* n: s4 g: [! u7 Z. p( j: l; R
_serialPort.Parity = Parity.None;
, @+ v1 {" l" k3 U4 P, b
% _/ h- `/ p& s, U" f# X1 i //设置为8位数据, U b4 @/ t* H& |: H8 d# z
_serialPort.DataBits = 8;
6 r: J+ S$ o* q) A, e! K* d2 v //设置停止位为1
7 l! e( H' C, Z! h2 _# Z6 Y _serialPort.StopBits = StopBits.One;0 Y& ` T. R) t- C/ L
//设置为无握手" p3 p7 v4 m: ]9 Y
_serialPort.Handshake = Handshake.None;
0 y7 G8 ?1 E' p; ]; s; u/ h //设置读/写超时值5 H* Q* [9 L: g5 j+ Z3 @
_serialPort.ReadTimeout = 500;# H. Y9 n6 z: b1 Y
_serialPort.WriteTimeout = 500;4 q% `/ \( k, s* _! i7 f$ F
//打开串行端口3 C- a0 c8 a5 r$ I% O& [7 U2 f
_serialPort.Open();3 X/ N1 _; c$ {
}: @8 x& J0 \3 \3 H" o7 c2 x
catch (Exception ex)
6 O3 ]5 s6 {7 M8 D {9 P& \: F8 L+ f3 N# T: Z
Message.show(ex.Message);! g5 Q# T# A0 u5 P5 b# Z; @# L2 ]
}1 |) I2 ^& \0 N3 \0 o3 u' F/ R
}
6 P7 k7 M1 V# @$ Z% N" t" r$ a ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。1 Y& T+ f6 Z8 J& e" B+ \% |; e
按键命名 提示内容
% C* o) L7 Z4 e button_PLY 播放
) B7 Y# x# ` U6 m" ]/ f+ } button_STP 停止
! }' K2 p' S8 U button_FWD 快进
/ N1 J& _% {- g! ~ button_RWD 快倒
6 ^, V# Z. f4 W5 M( q button_RCE 播放
0 P$ Y' ]) a/ t1 j1 C5 Q button_RTM 清零
' z; O0 J Z7 X, {( [! [' d button_ZLO 定位到零
9 M+ i. P+ r6 Z8 A; F ——双击按钮图标增加按钮处理方法(以录音为例)
; S, J, x) s; n* N$ w private void button_PLY_Click(object sender, RoutedEventArgs e)
" a( s' R) S+ @& F/ k" f {
/ }1 Q' v0 Y' v6 O% v/ z try
8 {* k7 s! V7 U" R; c {/ O* ]" P6 R* u/ D: S3 M' h4 y) _
//发送从输入信号直接输出方式控制字符串8 B" e% Y7 t; p% J. c
_serialPort.WriteLine("INP F ");5 s6 e; ^6 g# I: N
n& V. M% b; s: i
//休止100ms
+ p7 l! R3 i, Z6 v0 U, X5 @ Thread.Sleep(100);& U) O% N9 m9 x$ m2 h" \& a
//发送所有通道Ready的控制字符串% V! Z8 U# K( j5 g
_serialPort.WriteLine("REA F ");
; d/ | ~+ ^4 m6 d6 M. `- I' E Thread.Sleep(100);+ y9 {3 o% w) v5 [0 g
//发送开始录音的控制字符串。
' s& j9 h* M) _ _serialPort.WriteLine("REC ");
* r3 r( ]8 B9 B# d! i8 v }
/ ?+ i2 z/ s0 m, G9 ~% E2 ^% } catch (Exception ex)
, D5 X: r* O2 ^. o {5 r( B* S) B) v
Message.show(ex.Message);# Q. u. r2 {# @
}
7 a# S+ A+ H( @, t$ P }! P7 N2 c" k3 B4 @3 A7 Z
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
0 t# Q2 w2 V3 v; l' | 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
7 o" D+ p5 r$ X; C) ]+ N7 f3 d# [ 播放控制字符串:PLY+空格+回车
( w- [: i, }: F# z, l 停止控制字符串:STP+空格+回车
. j4 a# B. P/ q, t, y# K 快进控制字符串:FWD+空格+回车$ A# O; \* X6 L1 L! K
快倒控制字符串:RWD+空格+回车
% y, ~# R- |) b* [6 l 复位控制字符串:RTM+空格+回车$ E5 k, i$ ^4 Z
定位到零字符串:LZA+空格+回车9 X5 `) g$ e0 r G" I7 U& j, r
& c/ S, Y) E/ H |5 }$ n/ ?7 i/ R8 w
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
D S0 J L5 p8 Y9 g , @' W Q: N/ z
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
6 U4 H1 L# \. w, K' N |