基于MODBUS协议的医用臭氧治疗系统毕业设计.docx
《基于MODBUS协议的医用臭氧治疗系统毕业设计.docx》由会员分享,可在线阅读,更多相关《基于MODBUS协议的医用臭氧治疗系统毕业设计.docx(49页珍藏版)》请在冰豆网上搜索。
基于MODBUS协议的医用臭氧治疗系统毕业设计
基于MODBUS协议的医用臭氧治疗系统毕业设计目录
1.1医用臭氧治疗仪的背景1
1.2医用臭氧治疗仪需要解决的问题1
1.3医用臭氧治疗仪的解决方案1
2.1系统基本结构3
2.2物理实现3
3.1协议内容5
3.2通信过程6
4.1选型7
4.3.1A/D取样电路实现8
4.3.2D/A输出电路实现9
4.3.3I/O输出/输入电路实现10
4.3.4断电报警电路实现10
4.3.5停泵报警电路实现11
4.3.6臭氧浓度调节电路实现11
5.4.1上位机的程序应用18
5.4.2上位机初始化19
5.4.3预充处理程序20
5.4.4臭氧血液混合处理程序20
5.4.5臭氧浓度处理程序24
5.4.6报警处理程序26
5.5.1下位机的程序应用28
5.5.2下位机初始化29
5.5.3数据接收、发送处理程序30
5.5.4数据包处理程序34
5.5.5A/D取样处理程序40
5.5.6D/A输出处理程序42
5.5.7血泵流量纠正程序42
第一章医用臭氧治疗仪的应用
1.1医用臭氧治疗仪的背景
利用臭氧对病毒性肝炎治疗在临床上的应用已越来越广泛,并已取得很好的治疗效果。
医用臭氧治疗仪将为病毒性肝炎患者提供一套与免疫激活气血混合器配套使用的臭氧免疫调节系统,该系统可以根据肝病治疗的需要,将医用级氧气精确而稳定的制成治疗所需臭氧浓度,经过免疫激活气血混合器的将血液和臭氧充分混合激活、活化后的血液回输到人体,起到病毒杀灭、提高人体干扰素、免疫调节、激活红细胞代谢、激活免疫活性细胞、激活人体抗氧化酶系统的作用。
1.2医用臭氧治疗仪需要解决的问题
医用臭氧治疗仪(以下简称治疗仪)是将一定量的人体血液引到体外,与一定比例的医用臭氧气体混合后,回输到人体的自动治疗过程。
在治疗过程中要分别对医用臭氧气体的浓度、人体的血压、血液循环管路中的气泡进行监测。
一旦参数偏离设定值,治疗仪将发出声光报警信号,提醒医务人员进行处理。
另外治疗仪的相关参数和功能要符合医疗器械的电气安全标准。
例GB9706.1《医用电气设备通用安全要求》及GB9706.2《医用电气设备血液透析、血液透析滤过和血液滤过设备的安全专用要求》等提出血泵停泵报警、设备断电报警要求。
1.3医用臭氧治疗仪的解决方案
触摸屏与单片机通过Modbus协议进行通信。
触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。
单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境,大大降低了产品的制造成本。
如图1-1
图1-1触摸屏与单片机通信示意图
本文以AT89s52单片机和人机电子有限公司的eViewMT5600T型触摸屏为例,应用到医用臭氧治疗仪的通信程序的开发过程。
首先介绍医用臭氧治疗仪的总体结构,第三章MODBUS协议的通信原理及通信接口的选择。
第四章介绍了硬件的实现,包括上位机的选型、下位机的选型、下位机的各单元电路的实现。
第四章介绍了医用臭氧治疗仪的软件实现,包括上下位机的地址对应、功能码的定义、校验码的生成、上位机各软件实现、下位各软件实现。
其中上位机重点介绍了初始化、预充程序、臭氧血液混合程序、深度处理程序、报警处理,下位机重点介绍了初始化、数据接收、发送程序、数据包处理程序、A/D取样程序、D/A输出程序、血泵流量纠正程序等等。
第二章医用臭氧治疗仪系统结构
2.1系统基本结构
实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。
本文使用开放的Modbus通讯协议,以触摸屏作主站,单片机作从站。
eView触摸屏本身支持Modbus通讯协议,如果单片机也支持Modbus协议,就可以进行通信了。
本系统可以利用触摸屏自带的串口与单片机进行通信。
如图2-1所示:
图2-1系统基本结构
其中
人机界面(HMI)负责与接受用户命令,控制程序的运行。
显示与程序相对应的图形界面。
MCU1:
作为从站1通过COM0与HMI相连。
负责系统的信号输出。
包括血泵电机的流量调节、各个电磁阀的打开和关闭、报警信号的动作、臭氧浓度电机的调节等。
MCU2:
作为从站2通过COM1与HMI相连。
负责系统的信号输入采集。
包括人体血压、氧气压力、血液管路的气泡信号、臭氧浓度等。
2.2物理实现
目前,可以通过下列三种方式实现Modbus通信。
以太网上的TCP/IP;各种介质上的串行链路上传输;ModbusPLUS,一种高速令牌传递网络。
选择何种实现方式主要是依据他所连接的设务所处的地位。
一般采用标准的232口、485接口、422接口。
由于rs232的传输距离为30m,治疗仪的体积不大,不可能超过30m,因此可以选用rs232通信方式来提供对Modbus的硬件支持。
将AT89S52单片机串口(RXD、TXD)经过MAX232芯片将TTL电平转换为RS232电平,再与eView触摸屏PLC[RS-232]接口相连,即完成了硬件连接。
eView触摸屏PLC[RS-232]接口的管脚2为TXD,管脚3为RXD。
图2-2为该系统串行接口的电路图。
图2-2系统串行接口电路图
第三章MODBUS协议
Modbus协议是OSI模型第七层上的应用层文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。
互联网组中已经保留TCP/IP系统端口502用以访问Modbus,Modbus协议已经成为一种流行的工业控制传输标准。
3.1协议内容
Modbus协议定义了消息与格式和内容的公共格式,主要采用命令/应答方式,每一种命令文都对应着一种应答文,命令文由主站发出,当从站收到后,就发出相应的应答文进行相应。
Modbus的信息帧包括站点、字节长度、功能码、操作地址、操作数据、CRC校验值等。
在Modbus系统中有两种有效的传递模式即ASCII和RTU模式。
内容格式及字符长度如表3-1:
表3-1两种有效传递模式
ASCII模式传输格式
RTU模式传输格式
STD
启始字符
START
超过10ms之静止时段
ADR1
通讯地址:
8-bit地址包含了2个ASCII码
ADR
通讯地址:
8-bit地址
ADR2
CMD1
指令码:
8-bit地址包含了2个ASCII码
CMD
指令码:
8-bit指令
CMD0
DATA(N-1)
资料内容:
n*8-bit资料包含了2n个ASCII码,n<=25,最多50个ASCII码.
DATA(N-1)
资料内容:
n*8-bit资料
n<=25
……..
……..
DATA0
DATA0
LRC
CHK1
校验值:
8-bit地址包含了2个ASCII码
CRCCHRLOW
16-bit校验值由2个8-bit字符组成
LRCCHK0
CRCCHKHIGH
END1
结束符:
END1=CR(0DH),END0=LF(OAH)
END
超过10ms之静止时段
END0
由于RTU模式传输位数少,使用方便,本治疗仪采用RTU模式进行传输。
3.2通信过程
Modbus通信协议是一种串行的主从通信协议,网络里仅有一台设置可作为主机(称Master),其它设备作为从机(称Slaver),主机不需编号,从机必须编号。
协议定义了主机查询及从机应答的信息帧格式。
通信时,主机首先向从机发出请求信息,符合相应地址码的从机接收通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务,然后把执行结果返给主机。
若从机接收到的校验码与本机计算的不同,则说明数据在通信过程中出现错误,从机把这次请求视为无效,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
当主机收到这一信息时,会重新发送请求信息。
校验方式分为LCR(传送数据为ACSII时)校验或CRC(传送数据为二进制时)校验,这里采用CRC校验方式。
信息传输为异步方式,并以字节为单位。
主从站之间通讯的字格式如表3-2所示。
表3-2通讯的字格式
字格式(串行数据)
10位二进制
起始位
1位
数据位
8位
奇偶校验位
无
第四章硬件实现
4.1选型
4.1.1上位机选型
作为上位机必须要有良好的人机交互环境,并且上位机必须要支持Modbus通讯协议,而且要提供相应的串行通信接口(rs232)。
eView的MT5620T触摸屏本身支持Modbus通讯协议,并且提供2个串行通信接口。
具体参数如图4-1所示:
图4-1MT5620触摸屏参数
4.1.2下位机及相关部件选型
作为下位机必须要支持Modbus通讯协议,而且要提供相应的串行通信接口(rs232)。
另外能够采集相关的A/D、D/A、I/O信号。
AT89S51单片机内含一个串行口,能够支持Modbus通讯协议,通过相应的A/D、D/A芯片能够完成模拟信号、数字信号的采集和输出。
A/D转换芯片的选择:
医用臭氧治疗仪在治疗过程中需要采集的数字信号有臭氧深度信号(0——100ug/ml),氧气压力信号(0——500Kpa),静脉压信号(-100Kpa——+100Kpa),所以10位的A/D转换芯片完全能够满足精度要求。
选择TLC1543A/D转换芯片。
D/A转换芯片的选择:
医用臭氧治疗仪在治疗过程中需要对血泵电机进行控制,血泵电机的转速范围在(2.0转——48.0转),其中每一转中要分成10档,故D/A转换的芯片要选择10位。
选择TLC5615转换芯片能够满足要求。
4.2上位机硬件实现
由于eView的MT5620T触摸屏是厂家集成在一起的触摸式显示屏,并提供相应的编程软件。
如下图4-2所示
图4-2MT5620T触摸屏
4.3下位机硬件实现
4.3.1A/D取样电路实现
TLC1543芯片一共有11路(A0——A10)10位A/D信号输入,在这里只用是三路分别是A0、A1、A2。
其中A3——A5作为备用。
芯片的CLOCK、DIN、DOUT、CS分别与单片机相连。
芯片的基准电压采用高精度的可调三端稳压器LM336-5Z。
基准电压的好坏直接影响取样的精度和稳定性。
具体线路如图4-3所示。
其中臭氧浓度信号、氧气压力信号、静脉压信号的最大值都在4.7v,故将基准电压调在4.7v即可。
图4-3A/D取样电路
4.3.2D/A输出电路实现
TLC5615芯片有一路10位D/A信号输出,通过软件设置能够输出两倍的基准电压。
芯片的DIN、SCLK、CS与单片机的引脚相连。
芯片的基准电压采用高精度的可调三端稳压器LM336-5Z。
基准电压的好坏直接影响取样的精度和稳定性。
D/A输出线路如图4-4所示。
由于血泵电机的驱动信号在0v——2.2v范围内变化,血泵电机驱动线路如图4-5所示。
利用芯片的倍压功能,故将基准电压调在1.2v即可。
图4-4D/A输出电路
图4-5血泵电机驱动电路
4.3.3I/O信号输入/输出实现
由于输出电路中有继电器的存在,必须做好隔离。
单片机的输出信号经反相器后通过三极管驱动后,作用=继电器动作。
具体电路如图4-6所示。
由于输入信号中不存在强的干扰信号,可以与单片的引脚直接相连。
图4-6I/O信号输入/输出电路
4.3.4断电报警电路实现
医用臭氧治疗仪在治疗过程中是将血液引出体外与臭氧相混合,在治疗过程中一当断电必须发出声音报警,提醒医务人员及时将血液输出体内。
报警声音必须持续1min。
断电报警电路独立与其它电路单独工作,如图4-7所示。
接口J2与总电源开关的输入端相连,有电源输入时,断电器吸合,电路对电容C2进行充电。
当外界电源断电时,继电器断开,电容C2通过蜂鸣器进行放电。
调节电容C2的大小可以调节报警时间。
图4-7断电报警电路
4.3.5停泵报警电路实现
医用臭氧治疗仪在引血过程中血泵停止工作,将引起血栓。
将对病人的治疗产生危险。
只需将电机的运转信号取样后进行比较即可。
如图4-8
图4-8停电报警电路
4.3.6臭氧浓度调节电路实现
臭氧浓度调节原理如图4-9所示。
臭氧浓度的高低是通过改变输入到高压发生器的电压高低来调节。
输入电压的调节是通过调压器来实现。
转动安装在调压器上方的直流电机,就可以改变调压器的大小。
当臭氧检测仪检测的浓度高于设定的浓度,CPU发出反转信号,使调压电机反转,调压器输出电压降低,高压发生器输出电压减少。
从而使臭氧的浓度降低,与设定值相等。
线路图如图4-10所示。
图4-9臭氧浓度调节原理
图4-10臭氧深度调节线路
第五章软件实现
软件实现包括:
初始化关键字,包括波特率设置,数据位数、停止数、奇偶校验模式等,总线上所有的master及slave的以上设置应完全一致。
Modbus编程主要需要处理好校验码的生成及数据包的处理。
5.1单片面与触摸屏地址的对应关系
eView触摸屏只支持Bit和Word地址类型,而实际的单片机或其它控制器还有Byte、DoubleWord等表示方法,因此在进行通信时,需要把单片机和触摸屏的数据进行变换。
触摸屏画面元件读取地址的设备类型有LW、0x、1x、3x、4x、RWI、RW等选项。
其中,LW表示该元件读取的是触摸屏内部的地址,如其它元件的地址;0x表示读取的是控制器的输出信号;1x表示读取的控制器的输入信号;3x和4x指控制器的寄存器地址类型,其中4x是可读可写的,3x是只读的;RWI、RW都是触摸屏的内部地址,起辅助作用。
使用这些读取地址的设备类型,触摸屏即可显示或设定控制器寄存器或I/O口的数值。
以“数值输入”元件为例,通过“小键盘”输入数据即可设置单片机寄存器或I/O口的数值。
如果启动了“触发地址”,那么当被触控时,输入的数据就被存放到了指定的单片机地址中。
5.2功能码定义
数据处理及发送模块执行Modbus协议功能码对应的运用。
eView触摸屏与单片机以Modbus协议通信,用到的Modbus功能码如表5-1所示。
表5-1通信程序用到的功能码
功能码
eView地址名称
含 义
作 用
01
0x
读开关量输出
读取一路或多路开关量输出状态
03
4x
读保持寄存器
读取一个或多个保持寄存器的数据
05
0x、1x
写开关量输出
强置一路继电器的“分/合”输出
16
3x、4x
预置多寄存器
把具体的数据装入一组连贯的保持寄存器
以Modbus功能码03为例来说明触摸屏及单片机的实际通信数据格式。
如单片机地址编号为01H,触摸屏需要查看单片机中地址为0031H的寄存器的值,发送命令格式如表5-2所示。
表5-2触摸屏发送数据结构
数据段名称
数据值
地址
01
功能码
03
读取地址高位
00
读取地址低位
31
读取数据个数高位
00
读取数据个数低位
01
CRC校验码高位
D5
CRC校验码低位
C5
假设单片机中地址为0031H的寄存器中断为05H,则单片机的回复命令如表5-3所示。
表5-3单片机应答数据结构
数据段名称
数据值
地址
01
功能码
03
读取字节数
02
寄存器数据高位
00
寄存器数据低位
05
CRC校验码高位
78
CRC校验码低位
47
5.3校验码生成
根据传输模式的不同,系统需要产生不同的校验码,ASCII模式采用LRC校验,而RTU采用CRC校验。
实现这两种方法的函数均可以在相关资料中找到。
下面是用C语言设计的CRC校验,而产生的返回值CRC16即为回传之校验码。
/*TableOfCRCValuesforhigh-orderbyte*/
ucharcodeauchCRCHi[]={
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,
0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,
0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
0x40
};
/*TableofCRCvaluesforlow-orderbyte*/
ucharcodeauchCRCLo[]={
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,
0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,
0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,
0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,
0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,
0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,
0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,
0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,
0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,
0x40
};
uintcrc16(uchar*puc