请教一下MCGS脚本驱动开发的问题 点击:4501 | 回复:7



liaopinjia

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 3回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2012年4月26日
发表于:2012-08-28 12:31:31
楼主

最近在用昆仑通态公司的MCGS脚本驱动开发工具做东西。个人感觉脚本驱动并不难理解,但是多次调试驱动,仍然没有解决问题。以下提出几个问题:

1、是不是下位机接收到父设备发来的命令后才发送数据帧?如果是,那如果上位机(MCGS)要发送数据给下位机,应该怎么处理?

2、在上传的资料中,提到了一个smartcom的串口软件,那位好心人有的话能否传一份到帖子上或者本人邮箱(1483593126@qq.com),本人诚心感谢!

3、我用虚拟串口拟下位机发送数据的时候,甲苯驱动只接收到两个字节(实际发送数据有十几个字节),这是因为我不是接收到父设备发来的命令就直接发送数据给父设备的原因,还是另有其它原因呢?

 

以下是采集脚本程序附录:

‘———————————————————————
‘驱动脚本:采集函数脚本,MCGS将定时调用这个函数
‘这个函数需要完成从设备获取数据,并将数据根据协议
‘进行解析,最后赋值到相应通道上的功能。
‘这部分是注释,请在下面编辑采集脚本的内容:
‘———————————————————————
DIM strCmd as STRING
DIM strRec as STRING
DIM nReturn as INTEGER

‘添写协议命令  "$"+ 两位的设备地址 + "6" + !Chr(13),!Chr(13)是回车符
strCmd = "00" + !I2Hex(设备地址)     ‘I2Hex:把指定的数转化成字符串
‘读取第一个通道的值
‘strCmd = "#"+!right(strCmd,2)+!I2Hex(1)+!Chr(13)
‘读取的有通道的值
strCmd = "#"+ !right(strCmd,2)+ !Chr(13)
‘读取数据时,读取到回车符时就停止读取并返回数据
nReturn = !DevWriteAndReadStrByFind(strCmd,strRec,!Chr(13),通讯延时)
‘如果读取数据的返回值小于7,读取数据失败或者有错误,退出写通道值,继续采集
‘返回的数据位字节数
if nReturn<16 then
‘设置所有通道的值为0
  !SetSingleChannelValueByName("时",0)
  !SetSingleChannelValueByName("分",0)
  !SetSingleChannelValueByName("秒",0)
  !SetSingleChannelValueByName("温度",0)
  !SetSingleChannelValueByName("设定温度",0)
  exit
endif
‘返回的数据中的第一位是标识符,最后一位是回车符,一个通道是7位,与7取模用于判断返
‘数据是否与协议相同,否则退出写通道值
nReturn=!len(strRec) mod 7
if nReturn<>2 then
  exit
endif
‘对读回来的数据进行解码输出
DIM strTemp as STRING
dim temp as integer
dim temper1 as integer
dim temper2 as integer
dim temper  as single
dim setdata1 as integer
dim setdata2 as integer
dim setdata  as single 
‘从返回数据中取出数据,赋值给strTemp,从第2位开始,脚本工具中的下标是从1开始的,取7位固定字长
strTemp=!mid(strRec,2,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
temp=temp*1.6             ‘数值转换成10进制数
!SetSingleChannelValueByName("时",temp)

strTemp=!mid(strRec,4,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
temp=temp*1.6             ‘数值转换成10进制数
!SetSingleChannelValueByName("分",temp)

strTemp=!mid(strRec,6,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
temp=temp*1.6             ‘数值转换成10进制数
!SetSingleChannelValueByName("秒",temp)

strTemp=!mid(strRec,8,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
temper1=temp*1.6          ‘数值转换成10进制数

strTemp=!mid(strRec,10,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
temper2=temp*1.6          ‘数值转换成10进制数

temper=temper1+temper2/10       
!SetSingleChannelValueByName("温度",temper)

strTemp=!mid(strRec,12,2)  ‘取指定长度的子字符串
temp=!val(strTemp)        ‘函数返回字符串所表示的数值
setdata1 =temp*1.6          ‘数值转换成10进制数

strTemp=!mid(strRec,14,2)  ‘取指定长度的子字符串
temp=!val(strTemp)         ‘函数返回字符串所表示的数值
setdata1 =temp*1.6         ‘数值转换成10进制数

strTemp=!mid(strRec,16,2)  ‘取指定长度的子字符串
temp=!val(strTemp)         ‘函数返回字符串所表示的数值
setdata2 =temp*1.6         ‘数值转换成10进制数

setdata=setdata1+setdata2/10
!SetSingleChannelValueByName("设定温度",setdata)

 

 

正在下载,请等待……
下载附件需0积分!




余 辉

  • [版主]
  • 精华:53帖
  • 求助:44帖
  • 帖子:3350帖 | 28451回
  • 年度积分:603
  • 历史总积分:131640
  • 注册:2006年4月25日
发表于:2012-08-28 16:22:16
1楼

我也正想学习一下MCGS呢    期待高手指教

liaopinjia

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 3回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2012年4月26日
发表于:2012-09-02 23:31:11
2楼

不难的,到北京昆仑通态官网下载点资料慢慢学吧。

101架钢琴

  • 精华:0帖
  • 求助:7帖
  • 帖子:7帖 | 13回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2014年7月07日
发表于:2014-07-10 14:05:17
3楼

回复内容:

对: liaopinjia 不难的,到北京昆仑通态官网下载点资料慢慢学吧。 内容的回复!


我怎么感觉资料那里的资料好少?

yun2502

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2011年10月27日
发表于:2017-07-28 16:07:54
4楼

资料那里的资料好少,太少了

二十一

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 17回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2018年1月09日
发表于:2018-01-31 08:58:55
5楼

资料少+11111

飞燕飞飞飞

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 310回
  • 年度积分:0
  • 历史总积分:105
  • 注册:2007年3月30日
发表于:2018-02-22 15:35:47
6楼

谢谢楼主!1

hanhuachizi

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 234回
  • 年度积分:9
  • 历史总积分:665
  • 注册:2011年2月06日
发表于:2020-09-28 18:26:19
7楼

好使好用!


热门招聘
相关主题

官方公众号

智造工程师