第五部分 控制软件编写实例
5 Q* U: x: j% \; h' c7 V0 F' Y& _( [. R' Z/ {
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。7 y% U4 f9 ~. {- t+ _8 k
1、开发环境
7 X# W( u5 w: g- I7 [) N& f i: @3 U 编译软件:Microsoft Visual Studio 2010: z& q7 G4 f) G, H. ?! \. g
基础框架:Microsoft .NetFramework 4.0" f% Q9 \! {9 c7 q7 ?
程序框架:Microsoft WPF
% T- I1 y& {& t& V 编程语言:C#: s: a' a! B7 ?' y: Z
2、实例功能& n. @7 |# L5 V! f$ R
——播放功能
: B" {, @; r; {6 P n, Y$ Y ——停止功能0 u9 y* i9 G4 v: _3 [6 A
——快速前进功能( D1 d5 L" T. o1 {3 |
——快速倒退功能3 V% F1 C; [$ B
——录音功能
7 Q) _& _% W* Z3 N1 ^ ——复位功能2 w3 w0 G [1 l, m; S) T( ]
——定位功能
: A( s% E) D0 Q2 u$ l 3、实例代码% F! x2 ?% @; n9 q! K" {
——在Visual Studio 2010中新建一个工程文件。# j% ~8 X! H5 X1 i- Q8 u
——在工程文件中的窗体代码文件中添加IO端口的引用。& u% _) {& @5 L) H
using System.IO.Ports;
' q' z, G" [3 M4 { ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。8 u0 F8 Y/ @/ e
static SerialPort _serialPort;
% E7 z j2 R8 e; B+ p ——双击窗体增加窗体装入事件处理方法
8 m4 U% u* I' u; F( m5 T private void Window_Loaded(object sender, RoutedEventArgs e)* ]6 M/ \. A; F2 K8 U$ H
{
+ O- a; I4 X% l7 V4 n/ @' [; ` }" @. a& w! Z! D; O0 R" s
在窗体装入事件处理方法中写入端口初始化的代码。
: w6 X1 q3 v* _! b$ ], l private void Window_Loaded(object sender, RoutedEventArgs e)% ~+ u- \/ W; x# l- O1 N
{
' C) r1 m: L H# y! f3 A //创建一个新的串口对象实例
, z- z* i+ @9 q _serialPort = new SerialPort();
0 H1 V1 x* {9 W) S3 ? //枚举计算机中的串口7 l# R" O% I4 s- q! n0 }
string[] ports = SerialPort.GetPortNames();
3 c4 i8 m3 A1 @) @ //如果系统没有串口装置则退出- @5 M7 n# n @
if (ports == null): |, u+ ^( v: i. M
{
1 A( O: i& m: e+ F; L this.close();
! z. S+ q4 c0 {4 e0 V0 }9 I4 ` }
; { A8 H2 p1 l' a try o: n/ ^3 z# W7 }7 ^+ |9 R0 _
{
+ ]# n" ?1 G" C; Y8 u% s+ P //使用系统的第一个串行端口4 g& O: s7 }" H0 e6 M
_serialPort.PortName = ports[0];+ a( T0 v# p' l$ ]
//设置为9600的速率
! l( P5 ~! p! m5 f. r' | _serialPort.BaudRate = 9600;
, @- u( c+ t( O* t //设置为无校验: n, a# ?, q3 C- W# g4 h: A5 s
_serialPort.Parity = Parity.None;
) Z+ E& B' ?4 g5 B; r* s" |
1 S/ N$ [& t5 Z6 d# C //设置为8位数据5 u# q' X4 A& }: H' c/ K1 L
_serialPort.DataBits = 8;& I, F8 z2 L" W$ N- U$ p- _% _
//设置停止位为1
9 n2 b* ^: g; {4 q7 W; m _serialPort.StopBits = StopBits.One;3 b9 `( X! r) l. `+ P C+ D
//设置为无握手
9 k! u: O* X- [( H6 @9 o2 M _serialPort.Handshake = Handshake.None;
; u# K- j) U# J //设置读/写超时值' d& g- Q5 a }& y6 ?+ N& m0 V! O
_serialPort.ReadTimeout = 500;1 G# T/ F% k8 _4 `: S
_serialPort.WriteTimeout = 500;
" i5 `4 y$ c7 R) ~ //打开串行端口
% @; z/ o- _& d: Q* s: C4 { _serialPort.Open();5 P1 y8 c. Z" }
}9 D3 P& U$ ]. x; g
catch (Exception ex)
$ E1 G3 K2 M* q9 R2 h9 j {
5 `" C \2 e+ `$ A x# |1 A( [ Message.show(ex.Message);: W3 N T8 m- R" a3 W; a1 a
}
" k# a, j* G" g }
6 x9 N: u7 l }" G ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。: U+ T$ g% v) @: [" [, x$ @
按键命名 提示内容
0 w! G8 i! q: Z6 w# z/ ~& ~ button_PLY 播放
. Z0 [+ Y' K" k5 C( d button_STP 停止+ }9 m( n) W+ ~& I7 `7 ]/ ^
button_FWD 快进' z$ f. ]% T* @+ B1 R( k3 |
button_RWD 快倒
, s* K3 ]2 Y K- a button_RCE 播放7 f- _, }! h7 _& p% T, m+ F
button_RTM 清零7 Q0 h* m, I( u0 `
button_ZLO 定位到零. K1 A3 S5 x( U- @1 s$ O: Z
——双击按钮图标增加按钮处理方法(以录音为例)! f3 ]: [$ r" q' y/ ?) p
private void button_PLY_Click(object sender, RoutedEventArgs e)5 `5 [+ b j( I( ]+ F
{
3 Q) `# E4 b$ }( p; u# B1 E try* [) ~+ E2 O* k$ S1 n* j( G" t
{
& Y+ d- L) V. E, w( t& e //发送从输入信号直接输出方式控制字符串
& ~2 G3 h! p1 W: B _serialPort.WriteLine("INP F ");
' ]. R* u1 N2 s) H! s3 D - d9 a( o9 @& ~1 C: l: G
//休止100ms1 U' P9 X4 v. [* K8 R
Thread.Sleep(100);& V3 h7 ^0 B. |6 H% h3 ]1 U2 V4 a
//发送所有通道Ready的控制字符串
" x5 P8 ]8 |3 {5 w) l! b6 s9 n, b _serialPort.WriteLine("REA F ");
* s( |1 N" z# Z2 S Thread.Sleep(100);
# n/ t$ Y5 \- Q$ y: U //发送开始录音的控制字符串。; ^" M$ F3 {( N- v
_serialPort.WriteLine("REC ");7 Q( x9 g% K# Y
}
* M' I: Q; O- d, Z3 n catch (Exception ex): s& o+ h) V, n9 i0 @0 [% Y/ T+ R
{/ Y( P, Z% M) W+ \7 B
Message.show(ex.Message);/ r( u; ?3 J) v5 e8 ?1 _0 R$ b
}$ d! V5 {+ J4 J
}
: K- [2 @$ Q% D3 V 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
/ @2 Z" P4 U& L, g 按以上方法增加相应按键的处理方法,并发送对应的指令即可。+ E! h' B. @8 n+ {
播放控制字符串:PLY+空格+回车
, ?: N1 b, k" h! M5 Q 停止控制字符串:STP+空格+回车* }: s0 e6 D; V+ b* {% g( g0 M5 c
快进控制字符串:FWD+空格+回车
! W5 x4 G. T k z 快倒控制字符串:RWD+空格+回车
( e6 @: Y9 |, O; s6 ^* g" P$ v 复位控制字符串:RTM+空格+回车# O) v3 L" U/ D+ d4 E3 Z, x' G+ }
定位到零字符串:LZA+空格+回车
. U8 f5 `& o2 Y* T/ n' x 5 Z0 x6 M \3 R3 B9 Q. y) k+ }
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
5 x1 r2 {. c# r' z+ S% J4 ]+ E
# D; M; K1 b+ k7 w. K0 t: H) i! L 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。9 d) d5 j3 J" Y+ Q% d
|