第五部分 控制软件编写实例- X- H5 w3 j& j x
4 Y+ q4 t2 u/ h0 w( R7 q9 d9 O3 D 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。0 |6 V- G. I3 W5 f ]8 Z7 _( z3 W
1、开发环境# h6 o1 |( F9 A7 b! M3 v
编译软件:Microsoft Visual Studio 2010: [8 l: W# H# S5 Q" b6 Z! w) c
基础框架:Microsoft .NetFramework 4.0
( R. ?$ M" X! k- S( D& b 程序框架:Microsoft WPF/ N6 l, o# n3 S) P/ c3 f
编程语言:C#
. a9 e$ E7 c( r, e4 o1 Y U7 ^& [ 2、实例功能
7 d4 T& n, \ C1 D- ~3 _% f ——播放功能9 `0 v2 G9 P6 H2 e( }' @% o
——停止功能
" s# B# A7 Y! E0 B ——快速前进功能
2 X1 t, W" O2 Z6 _5 J. J ——快速倒退功能
" e) O* j8 D- B I8 f, f h ——录音功能9 x5 V: i2 M* L6 V- l: C
——复位功能4 h& y0 m5 r% P
——定位功能
. W+ |+ {% V: X 3、实例代码
) V: @9 q9 M$ m ——在Visual Studio 2010中新建一个工程文件。( O& l$ O- Z1 ]1 U3 d" p
——在工程文件中的窗体代码文件中添加IO端口的引用。9 ?: M" v* l: v, L
using System.IO.Ports;% Q. f& F0 V- A
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
- \. p: Z" L3 A/ p( g2 u1 P static SerialPort _serialPort;4 {1 {4 W U# Z Q( C8 F
——双击窗体增加窗体装入事件处理方法5 [3 O# }" j& D5 o
private void Window_Loaded(object sender, RoutedEventArgs e)
0 |& y! ]. N& u9 O( l2 K5 d: g; X- m {
& s$ H# X- Q! K1 y6 p0 ^ }! h+ w* a/ Z( E5 |- a+ \
在窗体装入事件处理方法中写入端口初始化的代码。. n) z, M* t" [! |3 d3 X0 h
private void Window_Loaded(object sender, RoutedEventArgs e)
B+ x5 p9 t' c* g. I {
/ n2 M; c' k& p% {9 a: P //创建一个新的串口对象实例
; E1 c/ B7 r7 V3 @1 ]/ N1 s _serialPort = new SerialPort();
, b3 @: F0 m* T v //枚举计算机中的串口
T/ q, `7 E1 B! D9 Z. m string[] ports = SerialPort.GetPortNames();7 s5 o7 ?( H5 L/ f% B# q
//如果系统没有串口装置则退出0 c7 m9 G! ?+ ?" I
if (ports == null)3 s6 C/ l6 U( r; T" G( P
{
& H! K& b. N" o( ]- @) `& @$ A0 p this.close();
- L6 q8 Z2 e# V$ o4 C }) M% M6 T8 _( b
try7 v% o8 ~ f" b* Y
{
2 Z0 O% v& p6 R- ?- S //使用系统的第一个串行端口9 ^( b) a% O. y+ I) l7 T& N
_serialPort.PortName = ports[0];
: ^/ C! j: \5 O! A //设置为9600的速率
& Z# Q! k- u( ?3 F _serialPort.BaudRate = 9600;+ ]- r. x: y2 _- l, u
//设置为无校验: o3 j' o& z, p8 s
_serialPort.Parity = Parity.None;8 |9 k& \0 T" G) n4 X/ [
+ T6 C) y8 a: L0 S3 `5 ^* ~+ H/ l //设置为8位数据
# L2 C* Z# C! @0 t( }, T, C; t' \9 o _serialPort.DataBits = 8;% o% A' q7 d9 e) [1 B4 x
//设置停止位为1
+ Z. k: i+ U9 S+ Y+ a$ N8 e _serialPort.StopBits = StopBits.One;! ]1 m& e I# D- H
//设置为无握手# u P9 F! ^6 e1 {8 a* x% Y8 s& G
_serialPort.Handshake = Handshake.None;8 j( s! y* x' |! m7 p# y' {1 E
//设置读/写超时值
) P2 N+ m# }1 |: U8 n0 M; ] _serialPort.ReadTimeout = 500;, A' j/ `* o! V/ S
_serialPort.WriteTimeout = 500;, L, d j2 r1 g& u" r6 ]. g4 I8 k
//打开串行端口
! s% P; g# L- }# O: D8 |5 v _serialPort.Open();
; w' L6 k! w, h* M* ?+ J }! J: u1 y" ]' }: q
catch (Exception ex)
- Z# A8 `3 N7 H( n( M {" y$ J: [! m$ C; z; J0 i3 V
Message.show(ex.Message);
- X$ U0 W5 ]& `( b% H9 Z }
2 M9 D# j( e2 I/ H5 Z* P0 e a s }
% o- z" l* ~, {1 h) F/ z3 X ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。. ^* O! F/ d. M" v
按键命名 提示内容
; }6 x3 [& ~0 m. e button_PLY 播放
. @5 k7 _; S& y* V D button_STP 停止9 R: D" W. I% [: ?3 y9 H
button_FWD 快进
( o' U9 y" M9 a button_RWD 快倒: J4 {6 c/ D1 w
button_RCE 播放% m, \+ { o- z) w+ m
button_RTM 清零5 J, q0 A5 K, J: o7 }: h
button_ZLO 定位到零9 f, u$ k+ g7 N$ d
——双击按钮图标增加按钮处理方法(以录音为例)
2 x; E$ P a& {, e. H# y private void button_PLY_Click(object sender, RoutedEventArgs e)
4 \$ w* N. a- i4 j5 E: \ {
8 i$ n! e% ^1 F- L try
& o# E s- q% @" G8 l {3 g: {4 ?3 f% v
//发送从输入信号直接输出方式控制字符串9 r/ S! ^. |. D% x. r
_serialPort.WriteLine("INP F ");( Y" f$ x# X, T f1 @! a; R
6 r7 J6 T' Y0 v$ f G4 h( }
//休止100ms
; d6 i/ g" H4 ?, i Thread.Sleep(100);
$ W j2 ?, N8 \; [. b6 ~ //发送所有通道Ready的控制字符串- ?5 L6 Y( w5 Y: E, e
_serialPort.WriteLine("REA F ");
. L4 r) ^7 N" S* g$ O9 n! d6 @ Thread.Sleep(100);
9 f: v" u' ^4 N. Q% Y //发送开始录音的控制字符串。# i+ ^- F* `4 @
_serialPort.WriteLine("REC ");% ]5 g; M/ ~/ l3 ]3 ?( ~
}
6 `! p% z( Z8 v& y0 r' c; \ catch (Exception ex)- [% p8 [# x* H( N: D. C- d
{
8 x0 n- G* x; v: G8 _0 P Message.show(ex.Message);7 |( A& @; r6 E
}* b; C; m: v' R- V
}
) F. k: } H1 j Z 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
_' y! q7 [0 X0 G' h" Y 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
8 l" h1 Y5 s9 y% B5 {* k 播放控制字符串:PLY+空格+回车3 q. N9 V) n& \* ~" Z2 R+ p
停止控制字符串:STP+空格+回车: a( ] N' Q3 k" ? X' w* h }0 M
快进控制字符串:FWD+空格+回车
0 B! B; u6 o* H% y& B8 b 快倒控制字符串:RWD+空格+回车) ]- h/ g) |+ h" p
复位控制字符串:RTM+空格+回车
. Z0 ?% R0 q4 u: n 定位到零字符串:LZA+空格+回车
3 j/ ]3 N2 ^( A% j " d6 @0 f! Z* o1 L4 N5 [
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}) k/ V$ j1 J6 @0 V% C
6 D" o; u1 f; e/ j! y$ ?3 W" |
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。7 D# X. G- ^& D6 b; B
|