下载
McgsPro_串口数据收发_v6.0.0.7_20201204.rar
1、 设备简介
本驱动构件用于串口相关数据的收发操作。
驱动类型 | 串口子设备,须挂接在“通用串口父设备”下才能工作 |
通讯协议 | 无 |
通讯方式 | 一主一从 |
2、 硬件连接
MCGS软件与设备通讯之前,必须保证通讯连接正确。
通讯连接方式:标准串口接线
3、 设备通讯参数
“通用串口父设备”通讯参数设置如下:
串口端口号:根据设备连接到屏的端口号,具体自己设置
通信波特率:根据设备选择
数据位位数:根据设备选择
停止位位数:根据设备选择.
数据校验方式:根据设备选择
设备构件参数设置
“串口收发数据”子设备参数设置如下:
l 内部属性:此设备无内部属性页.
l 最小采集周期:MCGS对设备进行操作的时间周期,单位为ms,默认为100ms,根据采集数据量的大小,设置值可适当调整。
l 协议类型:指定收发帧的格式是16进制还是ASCII码形式。
l 读串口的结束方式:设置读取数据时的结束方式,配合下面4个参数共同使用.详细看一下备注
l 通讯等待时间:采集是收帧时的等待时间,超过等待时间后就返回。
l 读串口停止字符: 设置收帧时串口的停止字符,以ASCII编码给出
l 读串口停止长度:设置收帧时的停止长度,当收到设置的长度时就返回
l 读串口起始字符:设置串口收帧时的起始字符
备注:0.给定结束字符:在指定的通讯等待时间内收到结束字符则返回结束字符以前(包含结束字符)的字符串,否则全部返回
- 给定长度:在指定的通讯等待时间内收到指定的长度后立即返回,否则全部返回(注:如果没发帧,下次采集时会读到当前帧的后半部字符串)
- 给定时间:读取在整个通信等待时间内收到的字符串
- 给定结束字符或给定长度:综合0,1两个条件,谁先满足就执行谁
- 给定起始字符和结束字符:在指定的通讯等待时间内,未收到起始字符则返回全部字符串,收到起始字符未收到结束字符,则返回起始字符以后(包含起始字符)的字符串,如果收到起始字符和结束字符,则返回起始字符和结束字符之间的字符串(包含起始字符和结束字符).
4、 采集通道
- 通讯状态:
通讯状态值 | 代表意义 |
0 | 表示当前通讯正常 |
非0 | 通讯错误 |
5、 固定通道
本驱动采用固定通道形式,如下:
通道0为通讯状态标志,通道1位字符串通道,通道2位16进制字符串通道
6、 设备命令
本设备构件提供设备命令,具体格式如下:
设备命令 | 命令格式 | 命令举例 |
读取命令Read | Read(返回值) | 例1.1: !SetDevice(设备0,6, “Read( strData) “)
读取串口数据以字符串形式存放带strData之中 |
写操作命令Write | Write( 写入值) | 例1.3: !SetDevice(设备0,6, “Write(strData) “)
取strData之中的值写入到串口之中 |
对字符串做校验
CheckCRC |
CheckCRC( 校验字符串,校验方式编码,校验结果字符串) | 例2.1: !SetDevice(设备0,6, “CheckCRC (strData,nIndex,strCrcResult) “)
strData为需要被校验的字符串,nIndex选择校验方式, strCrcResult是校验的结果,具体请参考本节备注 |
对字符串做校验
CheckCRC1 |
CheckCRC1( 校验字符串,字符串解析方式,校验方式编码,校验结果字符串,校验结果) | 例2.2: !SetDevice(设备0,6, “CheckCRC1 (strData,Ay,nIndex,strCrcResult,nRet) “)
strData为需要被校验的字符串,Ay为字符串解析方式,0为16进制格式字符串,非0位ASCII码字符串;nIndex选择校验方式; strCrcResult是校验的结果;nRet为返回值;具体请参考本节备注 |
对字符串做校验
CRC8 |
CRC8(校验字符串, 多项式, 初始值, 结果异或值, 校验结果) | 例2.4: !SetDevice(设备0,6,”CRC8(strTest,poly,init,_xor,testRes)”)
strTest为需要被校验的十六进制字符串, poly为多项式十六进制值 (多项式X7+X6+X5+X2+1,poly =E5), init是校验初始值, _xor为结果异或值, testRes为校验结果输出 |
对字符串做校验
CRC16 |
CRC16(校验字符串, 多项式, 初始值, 结果异或值, 校验结果) | 例2.5: !SetDevice(设备0,6,”CRC16(strTest,poly,init,_xor,testRes)”)
strTest为需要被校验的十六进制字符串, poly为多项式十六进制值 (多项式X7+X6+X5+X2+1,poly =E5), init是校验初始值, _xor为结果异或值, testRes为校验结果输出 |
对字符串做校验
CRC32 |
CRC32(校验字符串, 多项式, 初始值, 结果异或值, 校验结果) | 例2.6: !SetDevice(设备0,6,”CRC32(strTest,poly,init,_xor,testRes)”)
strTest为需要被校验的十六进制字符串, poly为多项式十六进制值 (多项式X7+X6+X5+X2+1,poly =E5), init是校验初始值, _xor为结果异或值, testRes为校验结果输出 |
标准CRC校验 | 参数模型(校验字符, 校验结果) | 例2.7: !SetDevice(设备0,6,”CRC-16/XMODEM(strTest,testRes)”)
CRC-16/XMODEM为参数模型, strTest为需要被校验的十六进制字符串, testRes为校验结果输出. 参数模型参见附录。 |
字符串转浮点数
HStr2Float |
HStr2Float(输入字符串,输出浮点数) | 例2.8: !SetDevice(设备0,6, “HStr2Float(strFloat, dbFloat)”)
strFloat为浮点数字符串,dbFlaot为数值型变量,用于存放转换结果 |
修改设备属性
SetParam |
SetParam(属性下标=属性值) | 例3.1: !SetDevice(设备0,6,”SetParam (0=1)”)
设置协议类型为16进制协议,属性下标和子设备参数一致,0为协议类型,1为读取串口结束方式,2是通讯等待时间,依次排列.属性值为你需要设置的值 |
UTF-8编码转ASCII编码
UTF8TOASCII |
UTF8TOASCII(utf8字符串,ASCII编码,字符串解码顺序) | 例4.1:!SetDevice(设备0,6,”utf8toascii(strData1,strData2,intcode)”)
将UTF-8编码的strData1转为ASCII编码,并写入到字符串变量strData2中。Intcode为0表示字符串解码顺序为12,为1表示解码顺序为21。 |
UTF-8编码转UNICOED编码
UTF8TOUNICODE |
UTF8TOUNICODE(utf8字符串,Unicode编码,字符串解码顺序) | 例4.2:!SetDevice(设备0,6,”utf8tounicode(strData1,strData2,intcode)”)
将UTF-8编码的strData1转为unicode编码,并写入到字符串变量strData2中。Intcode为0表示字符串解码顺序为12,为1表示解码顺序为21。 |
ASCII编码转UTF-8编码
ASCIITOUTF8 |
ASCIITOUTF8(ASCII编码,utf8字符串,解码顺序) | 例4.3:!SetDevice(设备0,6,”asciitoutf8(strData1,strData2,intcode)”)
将ASCII编码的strData1转为utf8编码,并写入到字符串变量strData2中。Intcode为0表示字符串解码顺序为12,为1表示解码顺序为21。 |
UNICODE编码转UTF-8编码
UNICODETOUTF8 |
UNICODETOUTF8(Unicode编码,utf8字符串,解码顺序) | 例4.4:!SetDevice(设备0,6,”unicodetoutf8(strData1,strData2,intcode)”)
将unicode编码的strData1转为utf8编码,并写入到字符串变量strData2中。Intcode为0表示字符串解码顺序为12,为1表示解码顺序为21。 |
获取UTF-8的十六进制编码
FORMATUTF8 |
FORMATUTF8(utf8字符串,utf8十六进制编码) | 例4.5:!SetDevice(设备0,6,”formatutf8(strData1,strData2)”)
将UTF-8编码的字符串strData1转为十六进制编码,并写入到字符串strData2中。 |
注:
CheckCRC的校验方式有异或和校验和CRC16校验,其中异或和校验的nIndex为0,CRC16校验分以下常见的几种
CCITT,CCITT_FALSE,XMODEM,X25,MODBUS,IBM,MAXIM,USB等常见的CRC16校验方式nIndex小标为1到8,其中最为常见的是MODBUS的CRC校验,nIndex为5.
CheckCRC1的校验方式有异或和校验和CRC16校验,其中异或和校验的nIndex为0,CRC16校验分以下常见的几种
CCITT,CCITT_FALSE,XMODEM,X25,MODBUS,IBM,MAXIM,USB等常见的CRC16校验方式nIndex小标为1到8,其中最为常见的是MODBUS的CRC校验,nIndex为5.
其中字符串解析方式 为 0时将将校验字符串解析为16进制字符串数据,非0时解析为ASCII码字符串.nRet为1表示校验正确,nRet为3表示解析为16进制字符串时字符串
含有非0-F的其他字符(支持小写的a-f).nRet为4表示设备命令执行失败,请检查参数正确性,nRet为5表示设备命令格式错误,请检查设备命令格式
常见故障分析
故障现象 | 分析 | 处理建议 |
通讯状态非0 | 查看设备命令格式是否正确 | 1、检查父设备串口校验位设置是否正确 |
2、适当延长“通讯等待时间” | ||
3、设备断电,重新上电,使初始化设备 | ||
4、通讯电缆太长,做短距离测试 | ||
5、现场干扰太大,避免周围环境干扰 | ||
6、通讯信号变弱,使用有源RS232/485模块 | ||
通讯速度太慢 | 通讯数据量过大或采集周期设置过长 | 1、将“采集优化”属性设置为“1-优化” |
2、减小父设备及子设备的最小采集周期
(最小可设置为20ms) |
||
3、使用设备命令,减少实时采集的数据 | ||
4、通过设备命令获取PLC延时,判断是否因PLC响应时间过长而影响采集速度。 | ||
通讯次数过多 | 5、将数据放到连续的地址块中,提高块读效率 | |
6、将不同寄存器的数据放到同一寄存器连续的地址块中,减少采集块数,提高采集效率 |
7、 特殊应用的开发
本设备构件目前只实现部分通讯功能,如需要用作其它用途或本构件不能满足要求时,可自行进行开发,《MCGS用户指南》中有关于开发设备构件的详细说明,也可以提出具体的技术要求,由我们亲自为您定制。
附录
参数模型 | 宽度 | 多项式POLY(Hex) | 初始值INIT(Hex) | 输入数据反转 | 输出数据反转 | 结果异或值XOROUT(Hex) |
CRC-8 | 8 | 0x7 | 0x0 | false | false | 0x0 |
CRC-8/CDMA2000 | 8 | 0x9B | 0xFF | false | false | 0x0 |
CRC-8/DARC | 8 | 0x39 | 0x0 | true | true | 0x0 |
CRC-8/DVB-S2 | 8 | 0xD5 | 0x0 | false | false | 0x0 |
CRC-8/EBU | 8 | 0x1D | 0xFF | true | true | 0x0 |
CRC-8/I-CODE | 8 | 0x1D | 0xFD | false | false | 0x0 |
CRC-8/ITU | 8 | 0x7 | 0x0 | false | false | 0x55 |
CRC-8/MAXIM | 8 | 0x31 | 0x0 | true | true | 0x0 |
CRC-8/ROHC | 8 | 0x7 | 0xFF | true | true | 0x0 |
CRC-8/WCDMA | 8 | 0x9B | 0x0 | true | true | 0x0 |
CRC-16/CCITT-FALSE | 16 | 0x1021 | 0xFFFF | false | false | 0x0 |
CRC-16/ARC | 16 | 0x8005 | 0x0 | true | true | 0x0 |
CRC-16/AUG-CCITT | 16 | 0x1021 | 0x1D0F | false | false | 0x0 |
CRC-16/BUYPASS | 16 | 0x8005 | 0x0 | false | false | 0x0 |
CRC-16/CDMA2000 | 16 | 0xC867 | 0xFFFF | false | false | 0x0 |
CRC-16/DDS-110 | 16 | 0x8005 | 0x800D | false | false | 0x0 |
CRC-16/DECT-R | 16 | 0x589 | 0x0 | false | false | 0x1 |
CRC-16/DECT-X | 16 | 0x589 | 0x0 | false | false | 0x0 |
CRC-16/DNP | 16 | 0x3D65 | 0x0 | true | true | 0xFFFF |
CRC-16/EN-13757 | 16 | 0x3D65 | 0x0 | false | false | 0xFFFF |
CRC-16/GENIBUS | 16 | 0x1021 | 0xFFFF | false | false | 0xFFFF |
CRC-16/MAXIM | 16 | 0x8005 | 0x0 | true | true | 0xFFFF |
CRC-16/MCRF4XX | 16 | 0x1021 | 0xFFFF | true | true | 0x0 |
CRC-16/RIELLO | 16 | 0x1021 | 0xB2AA | true | true | 0x0 |
CRC-16/T10-DIF | 16 | 0x8BB7 | 0x0 | false | false | 0x0 |
CRC-16/TELEDISK | 16 | 0xA097 | 0x0 | false | false | 0x0 |
CRC-16/TMS37157 | 16 | 0x1021 | 0x89EC | true | true | 0x0 |
CRC-16/USB | 16 | 0x8005 | 0xFFFF | true | true | 0xFFFF |
CRC-A | 16 | 0x1021 | 0xc6c6 | true | true | 0x0 |
CRC-16/KERMIT | 16 | 0x1021 | 0x0 | true | true | 0x0 |
CRC-16/MODBUS | 16 | 0x8005 | 0xFFFF | true | true | 0x0 |
CRC-16/X-25 | 16 | 0x1021 | 0xFFFF | true | true | 0xFFFF |
CRC-16/XMODEM | 16 | 0x1021 | 0x0 | false | false | 0x0 |
CRC-32 | 32 | 0x04C11DB7L | 0xFFFFFFFFL | true | true | 0xFFFFFFFFL |
CRC-32/BZIP2 | 32 | 0x04C11DB7L | 0xFFFFFFFFL | false | false | 0xFFFFFFFFL |
CRC-32C | 32 | 0x1EDC6F41L | 0xFFFFFFFFL | true | true | 0xFFFFFFFFL |
CRC-32D | 32 | 0xA833982BL | 0xFFFFFFFFL | true | true | 0xFFFFFFFFL |
CRC-32/JAMCRC | 32 | 0x04C11DB7L | 0xFFFFFFFFL | true | true | 0x00000000L |
CRC-32/MPEG-2 | 32 | 0x04C11DB7L | 0xFFFFFFFFL | false | false | 0x00000000L |
CRC-32/POSIX | 32 | 0x04C11DB7L | 0x00000000L | false | false | 0xFFFFFFFFL |
CRC-32Q | 32 | 0x814141ABL | 0x00000000L | false | false | 0x00000000L |
CRC-32/XFER | 32 | 0x000000AFL | 0x00000000L | false | false | 0x00000000L |
版权声明:本文内容来源于网络搜集无法获知原创作者,仅供个人学习用途,若侵犯到您的权益请联系我们及时删除。邮箱:1370723259@qq.com