签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
有一台称重仪表,通讯接口是RS485(四线制的),支持的通讯方式是自由口通讯,需要发送指令,才能够返回称重数据。比如输入指令MSV?;,则返回当前的重量数据;
硬件为S7-1212C和CM1241(RS422/485),在连接仪表前,已经和串口助手测试过。
仪表通讯参数设置为波特率9600,8N1
写好程序后,一直报错7000和7002,错误提示为块空闲和中间调用:数据传输运行;
程序如下: // 先将格式指令和获取重量指令定义好,初次扫描的时候将格式指令发送给仪表,定义通讯 的格式,然后用一个10Hz的脉冲去发送重量指令,当重量指令发送完成之后,完成位为1;
REGION 初始化
"自由口通讯数据块".send_buffer_cof := 'cof009;'; //设置数据格式;
"自由口通讯数据块".send_length_cof := 7; //指令长度为7个字符;
"自由口通讯数据块".send_buffer_msv := 'msv?;'; //读取当前重量;
"自由口通讯数据块".send_length_msv := 5; //指令长度为5个字符;
END_REGION
REGION 进行格式设置
"Send_P2P_DB"(REQ:="FirstScan", //通电初始化一次
BUFFER:="自由口通讯数据块".send_buffer_cof,
"PORT":="Local~CM_1241_(RS422_485)_1",
LENGTH:="自由口通讯数据块".send_length_cof,
DONE=>"send_done",
STATUS=>"send_status")
;
REGION 读取重量
"Send_P2P_DB_2"(REQ:="Clock_10Hz", //10Hz的脉冲;
"PORT":="Local~CM_1241_(RS422_485)_1", //本地串口,串口号为269;
BUFFER:="自由口通讯数据块".send_buffer_msv, //发送Ascii格式的字符串指令;
LENGTH:="自由口通讯数据块".send_length_msv, //指令长度为5
DONE=>"rec_done_msv", //发送完成的状态位
STATUS=>"rec_status_msv"); //错误代码
REGION 返回重量结果
IF "rec_done_msv" THEN //当发送完成状态位为1时,开始接受重量信息
"Receive_P2P_DB"("PORT" := "Local~CM_1241_(RS422_485)_1",
BUFFER := "自由口通讯数据块".rec_buffer_msv, //接收Ascii格式的字符串指令;
NDR => "rec_done", //接收完成状态位
ERROR => "rec_error",
STATUS => "rec_status"); //错误代码
END_IF;
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1698574&b_id=50&s_id=0&num=1
你试过plc连串口工具不,PLC的请求数据发出去了没?
receive_p2p_db需要无条件调用。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录