第五部分 控制软件编写实例
) J. x8 }' ^9 B0 l
; W* c9 J4 e- G( z 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
4 y7 N$ j4 W/ j5 | g$ T: r+ w0 l6 g 1、开发环境( t) ?, k) l* J% W) P4 \
编译软件:Microsoft Visual Studio 20106 y# J! Q7 u r/ p. r
基础框架:Microsoft .NetFramework 4.0
- C% Z( x2 |7 R C; J/ j5 R% T 程序框架:Microsoft WPF6 W& s1 L6 S9 n, U% h
编程语言:C#7 o! u L4 ?; H
2、实例功能) ~6 h0 w# Y: j4 p0 L
——播放功能4 z" N. @& t* q. B0 E$ i
——停止功能
7 z5 l# o* k8 r# \( g$ r( z( ?# b ——快速前进功能3 r$ d2 `& O% [8 S/ l
——快速倒退功能/ O( D* n( T! M& a7 n' b1 M: b$ B
——录音功能
$ \; G. k$ h7 \# O ——复位功能
' Q3 w8 a2 W) f; h8 Q# N2 {8 ], K ——定位功能1 ?$ c( ~9 S! a
3、实例代码; R2 j* S2 Q# Q/ d# |9 y. H
——在Visual Studio 2010中新建一个工程文件。
6 V3 W& q) `/ Z% f5 A+ } ——在工程文件中的窗体代码文件中添加IO端口的引用。
& l, k; i8 S! ]6 }8 R5 x* Y using System.IO.Ports;
/ `0 j3 F* ^" K) Y ~. s3 B ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。* E. P3 |! K* V; n8 E
static SerialPort _serialPort;
, d" w- C, M, i) v" s1 ` ——双击窗体增加窗体装入事件处理方法" U9 S# x8 h* W5 e0 |# |" l
private void Window_Loaded(object sender, RoutedEventArgs e)
% H Z8 h; s( [. ?5 t1 q: r {2 `. _2 b9 O3 n* @: Z3 h0 o6 _
} R" W9 P5 y/ E
在窗体装入事件处理方法中写入端口初始化的代码。' l$ x3 {& g/ k
private void Window_Loaded(object sender, RoutedEventArgs e)
! T4 V/ j: }8 r6 d0 |" \. I {
0 m9 h- r+ X/ r //创建一个新的串口对象实例
! C1 ~/ M1 h: ], K9 @ B6 @ _serialPort = new SerialPort();
: G# h& Y) I2 Y/ y( \ //枚举计算机中的串口
) ? F: S8 w( `7 i( R string[] ports = SerialPort.GetPortNames();& [6 f- w; w8 `. v% ]7 Y7 R
//如果系统没有串口装置则退出5 x0 m6 E( i9 d7 \; c
if (ports == null)
5 ?+ J! X4 `5 I( }+ U4 R' g2 H2 Q {
, w8 f) s- M/ \) P _+ R5 P this.close();' j0 M. _/ _, u5 x
}
# H; f! U% i" M" U ]5 g try1 ?/ L4 G: p6 v) O
{) p1 x" `2 S# F! d0 J. N- F
//使用系统的第一个串行端口
) f( S( T9 P( T/ w9 M" S# b8 @ _serialPort.PortName = ports[0];7 Y" V, G$ t- n( \
//设置为9600的速率
U; g+ d* B: b. ?4 {0 e: r _serialPort.BaudRate = 9600;* z, c: A: o9 d' y3 U) P' e8 N
//设置为无校验" l1 I; a8 l& Z, E( o
_serialPort.Parity = Parity.None;
2 b& U. u" U$ p2 W# |$ c# Q
2 @) w- @/ C+ J2 Q |5 I# L. d i //设置为8位数据! u0 ?. J# @6 Z5 Q _
_serialPort.DataBits = 8;0 K9 I1 C; N0 y0 m# r: U
//设置停止位为1
$ @) ~1 I0 n3 m3 u! Z% {- l _serialPort.StopBits = StopBits.One;
0 x& H. R# ~' s+ L& s: Q //设置为无握手
' U* p/ e: \! R9 \ _serialPort.Handshake = Handshake.None;; V b# z P- p! u
//设置读/写超时值" t1 Q2 W. m( J
_serialPort.ReadTimeout = 500;
& Z9 \8 Z& s* T% B; ?" G _serialPort.WriteTimeout = 500;
! H+ a- `( v6 L1 ?2 F9 |7 J/ W8 C4 N" Z //打开串行端口
8 f" b0 N/ a+ G, Y _serialPort.Open();
1 ^% r% X' E1 k; \" O) Q! d }7 X4 c; w7 f1 ~. [* H
catch (Exception ex)1 `5 M4 \! X8 M
{
( B( F! V9 M D: \/ C; u Message.show(ex.Message);2 l2 ~: j; H. Z. K# r; w1 v: f
}
" P4 q8 b! D8 ]; h: L9 y8 W }
& E: ]& q7 H! A ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
+ X3 O9 F. H2 q3 i 按键命名 提示内容
5 u4 ?8 `( O3 J+ R4 ]- M! W button_PLY 播放- u0 b4 M t, @ c6 G% V0 y9 i1 [( e) n2 Y
button_STP 停止
5 F d5 F0 o F( j+ d button_FWD 快进
* O; k, T$ _. C! R5 H4 Q, Z8 K b: q button_RWD 快倒3 {$ T Q) i0 l
button_RCE 播放1 M% P0 r4 b c6 Y0 @
button_RTM 清零
, B' s$ z7 e0 }& V0 p+ u- [) F! Q button_ZLO 定位到零
8 x7 v9 W/ V% K- \0 b7 c; x) r ——双击按钮图标增加按钮处理方法(以录音为例): U% V) I1 S+ N; x; I
private void button_PLY_Click(object sender, RoutedEventArgs e)
0 g9 |/ B- N1 T# [& ~8 I {1 l" I9 b7 g9 r1 ~5 Q
try
# I) K/ q8 }" ?" |1 Z2 R {5 F8 w" K. S1 s: q, I) I/ [
//发送从输入信号直接输出方式控制字符串' z! O- I- H+ S( q( ^
_serialPort.WriteLine("INP F ");* r& ]0 D0 @% g5 ?" p. N% u
. { V9 D: X5 f1 o7 s ?
//休止100ms
# U2 Z% o% s& J. ]( h4 K Q9 `. ]0 h Thread.Sleep(100);3 r5 |7 |. V* g5 ]' G& {
//发送所有通道Ready的控制字符串
7 I/ S' H4 A7 R, _7 f) c _serialPort.WriteLine("REA F "); $ ]. R) O9 A5 W' b/ o) t: `; z" V
Thread.Sleep(100);
. ]' s" Q- Q3 s //发送开始录音的控制字符串。
: B" U- s$ a3 s7 m5 \% I& x# M _serialPort.WriteLine("REC ");4 `; r: X/ I0 e$ r! U2 H2 \- t5 t
}
9 d; l/ [/ S0 g( p$ ] catch (Exception ex)% x. H; r) y) J Y5 y- q! k
{
b6 w1 w$ x2 w. @% I- G1 ^, [. { Message.show(ex.Message);5 y% P, x2 Q( w: F. V) h
}! j& o- w2 l, i+ b" k; E, R5 _
}* b( \: c- l% r; L) J; I
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。1 A: m& X& R, h
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
h! P4 |7 V9 X6 v& r/ `" N# ` 播放控制字符串:PLY+空格+回车+ w; J s. D9 K
停止控制字符串:STP+空格+回车
7 G# N7 E/ b; R( K8 W 快进控制字符串:FWD+空格+回车/ _0 |: k/ l, u! G3 Z7 X
快倒控制字符串:RWD+空格+回车
8 i; C) M. f& n- Y 复位控制字符串:RTM+空格+回车$ T! c1 O3 ~$ p, Y/ U, O) t
定位到零字符串:LZA+空格+回车
5 A; s& {7 p: R! g7 G
" b) @" c9 _8 \4 H7 p& t9 z 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}5 |3 p" k* W, D" r+ v& k
+ C! Q7 _' S6 w$ N. P5 J$ W- g
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
$ D4 f) A( h- m# R4 i |