我在使用OMRON的PLC时一般都用无线传输,无线传输的数据也大都采用透明方式。设备主要分为两种,一种是无线电台,一种是GPRS模块。(无线电台是一家公司从加拿大进口的丝贝克的 跳频电台,http://www.dlmytech.com/ 网站有详细的产品列表),即然使用无线数据模式,所以对于PLC之间来说,只要能识别设备,地址也不是很重要了,但我还是会按着顺序对PLC进行址编号。
HOSTLINK协议也是应答式方式,具体的内容请参考相关的资料,这里给出一段计算校验码的代码,如下:
View Code
至于这个为什么叫FCS校验我没问过也不太清楚,是以前我的同事都这样命名的。
///
<summary>
/// 将数据进行FCS校验,并返回一个完整的命令字符串
/// </summary>
/// <param name="data"> 增加FCS校验的数据 </param>
/// <returns> 带有FCS校验验并可发送到 OMRON PLC的数据 </returns>
public static string FCS( string data)
{
string hostlink = data + ComputeFCS(data) + " * " + ( char ) 13 ;
return hostlink;
}
/// 将数据进行FCS校验,并返回一个完整的命令字符串
/// </summary>
/// <param name="data"> 增加FCS校验的数据 </param>
/// <returns> 带有FCS校验验并可发送到 OMRON PLC的数据 </returns>
public static string FCS( string data)
{
string hostlink = data + ComputeFCS(data) + " * " + ( char ) 13 ;
return hostlink;
}
///
<summary>
/// 上位机校验
/// </summary>
/// <param name="linkstring"> 进行校验的数据,以@开始的字符串 </param>
/// <returns></returns>
private static string ComputeFCS( string linkstring)
{
char inFcs = ( char )linkstring[ 0 ];
int fcsResult = ( int )inFcs;
for ( int i = 1 ; i < linkstring.Length; i ++ )
{
inFcs = ( char )linkstring[i];
fcsResult ^= ( int )inFcs;
}
return fcsResult.ToString( " X " );
}
/// 上位机校验
/// </summary>
/// <param name="linkstring"> 进行校验的数据,以@开始的字符串 </param>
/// <returns></returns>
private static string ComputeFCS( string linkstring)
{
char inFcs = ( char )linkstring[ 0 ];
int fcsResult = ( int )inFcs;
for ( int i = 1 ; i < linkstring.Length; i ++ )
{
inFcs = ( char )linkstring[i];
fcsResult ^= ( int )inFcs;
}
return fcsResult.ToString( " X " );
}
//HOSTLINK协议的校验码校验很简单,从第一位到最后一位进行累异或运算,最后的结果的高低位相易。
View Code
///
<summary>
/// 对带有FCS校验的数据进行校验
/// </summary>
/// <param name="receives"> 带有FCS的数据 </param>
/// <returns> 校验正确返回 true 否则返回 false </returns>
public static bool CheckFCS( string receives)
{
int i = receives.IndexOf( ' * ' );
string data = receives.Substring( 0 , i - 2 );
if (receives.Substring(i - 2 , 2 ).Equals(ComputeFCS(data)))
return true ;
else return false ;
}
/// 对带有FCS校验的数据进行校验
/// </summary>
/// <param name="receives"> 带有FCS的数据 </param>
/// <returns> 校验正确返回 true 否则返回 false </returns>
public static bool CheckFCS( string receives)
{
int i = receives.IndexOf( ' * ' );
string data = receives.Substring( 0 , i - 2 );
if (receives.Substring(i - 2 , 2 ).Equals(ComputeFCS(data)))
return true ;
else return false ;
}
这就是一个简单的HOSTLINK协议校验计算的类,我已经打成DLL形式,在应用的时候调用,并已经用在很多项目上了。
希望能给初用这个协议的人员提供一点帮助。