qinchenglim
级别: 论坛先锋
精华主题: 0
发帖数量: 1218 个
工控威望: 1319 点
下载积分: 3936 分
在线时间: 739(小时)
注册时间: 2009-06-09
最后登录: 2024-10-08
查看qinchenglim的 主题 / 回贴
楼主  发表于: 2014-07-16 18:37
现在用到一款温控器,用RS-232通讯读取当前温度值。用PLC发送读取指令的时候要发送FCS效验码,以前没有用过这样的效验方式,不知道怎么计算,请用过的朋友分享一下计算方法。先谢谢了!
比如发送数据 H4030 H3030 H3131 ,它的FCS效验码是多少?怎么算的?再次感谢大家。
yamqq
雅马哈,爱普生,电装机器人。
级别: 网络英雄

精华主题: 0
发帖数量: 1717 个
工控威望: 5539 点
下载积分: 24588 分
在线时间: 299(小时)
注册时间: 2008-05-05
最后登录: 2024-08-25
查看yamqq的 主题 / 回贴
1楼  发表于: 2014-07-16 18:59
#include "stdafx.h"   char *fnFCS(const char *pstr,int iCount,char *pFCS)    //定义FCS校验函数 {   if(pstr==NULL||pFCS==NULL)       //如果指针为null return NULL;           //返回NULL char ch=*pstr;          //定义字符变量并赋初值 for(int i=1;i<iCount;i++)        //循环iCount次 {     ch^=*(pstr+i);         //异或运算 }   char ct=ch>>4;            //取异或结果的高四位 if(ct>9)            //转为ASCII码 ct+='A'-10;            else    ct+='0';  *pFCS=ct; ct=ch&0x0F;           //取异或结果的低四位 if(ct>9)             //转为ASCII码 ct+='A'-10;  else    ct+='0';   *(pFCS+1)=ct;    return pFCS;           //返回校验值 }    int main(int argc, char* argv[])       //定义主函数 {  char c,str[100]="";         //定义变量  int i=0;           //定义变量  char jyTemp[2];         //定义变量  printf("请输入要校验的字符串:\n");     //要求输入字符串   while((str=getchar())!='\n')       //输入字符串,直到遇到回车符  {   i+=1;   fnFCS(str,i,&jyTemp[0]);      //调用FCS计算函数  }   printf("以上字符串的FCS校验是:'%c%c'。\n",jyTemp[0],jyTemp[1]);  //输出结果  return 0; }
本帖最近评分记录:
  • 下载积分:+2(qinchenglim) 热心助人!
  • 这个人很懒,什么也没有留下!
    qinchenglim
    级别: 论坛先锋
    精华主题: 0
    发帖数量: 1218 个
    工控威望: 1319 点
    下载积分: 3936 分
    在线时间: 739(小时)
    注册时间: 2009-06-09
    最后登录: 2024-10-08
    查看qinchenglim的 主题 / 回贴
    2楼  发表于: 2014-07-17 08:09
    引用
    引用第1楼yamqq于2014-07-16 18:59发表的  :
    #include "stdafx.h"   char *fnFCS(const char *pstr,int iCount,char *pFCS)    //定义FCS校验函数 {   if(pstr==NULL||pFCS==NULL)       //如果指针为null return NULL;           //返回NULL char ch=*pstr;          //定义字符变量并赋初值 for(int i=1;i<iCount;i++)        //循环iCount次 {     ch^=*(pstr+i);         //异或运算 }   char ct=ch>>4;            //取异或结果的高四位 if(ct>9)            //转为ASCII码 ct+='A'-10;            else    ct+='0';  *pFCS=ct; ct=ch&0x0F;           //取异或结果的低四位 if(ct>9)             //转为ASCII码 ct+='A'-10;  else    ct+='0';   *(pFCS+1)=ct;    return pFCS;           //返回校验值 }    int main(int argc, char* argv[])       //定义主函数 {  char c,str[100]="";         //定义变量  int i=0;           //定义变量  char jyTemp[2];         //定义变量  printf("请输入要校验的字符串:\n");     //要求输入字符串   while((str=getchar())!='\n')       //输入字符串,直到遇到回车符  {   i+=1;   fnFCS(str,i,&jyTemp[0]);      //调用FCS计算函数  }   printf("以上字符串的FCS校验是:'%c%c'。\n",jyTemp[0],jyTemp[1]);  //输出结果  return 0; }

    一楼的朋友能具体解释一下FCS的计算原理吗?这么多高级语言看着有点眼晕了
    qinchenglim
    级别: 论坛先锋
    精华主题: 0
    发帖数量: 1218 个
    工控威望: 1319 点
    下载积分: 3936 分
    在线时间: 739(小时)
    注册时间: 2009-06-09
    最后登录: 2024-10-08
    查看qinchenglim的 主题 / 回贴
    3楼  发表于: 2014-07-18 07:35
    自己顶一下,别沉底了