一路向前hg
相互學(xué)習(xí),共同進(jìn)步!
級別: 略有小成
|
各位工控友友,有做過總線通訊ABB機器人通訊負(fù)數(shù)的案例嗎,想半天沒想到怎么轉(zhuǎn)換。浮點數(shù)倒簡單,總線通訊給整數(shù) ABB側(cè)除100給num數(shù)據(jù)就可以了,但負(fù)數(shù)沒想到怎么處理,求大神解 |
|
---|---|---|
|
快樂修狗
級別: 正式會員
|
加一個符號位,if 負(fù)數(shù) then Y=0-X else Y=X 樓主留言:感謝分享! |
---|---|
|
葉上初陽
級別: 正式會員
|
簡單點的用IF判斷個大于0小于0,大于零直接輸出,小于0用abs做個絕對值輸出,再輸出個正數(shù)負(fù)數(shù)信號,到了輸入端再轉(zhuǎn)換正負(fù)數(shù)。復(fù)雜點應(yīng)該不用另外另外加正負(fù)信號,得把正負(fù)數(shù)用byte表示,轉(zhuǎn)換成二進(jìn)制做個bit的移位,前邊設(shè)置一個判斷正負(fù),之后用01表示正負(fù)值移位保存到byte里,再轉(zhuǎn)換回到十進(jìn)制,應(yīng)該不會超出組信號的表示范圍,想到了這么個法子,不知道行不行,我一會試試去。 樓主留言:熱心助人! |
|
---|---|---|
|
葉上初陽
級別: 正式會員
|
不用byte打包數(shù)據(jù),多此一舉,直接移位就行,組輸出范圍不夠擴一下。 IF a_num_test1>=0 THEN b_num_test1:=0; c_dnum_test1:=BitLShDnum(NumToDnum(b_num_test1),12); c_dnum_test1:=BitOrDnum(c_dnum_test1,NumToDnum(a_num_test1)); d_num_test1:=DnumToNum(c_dnum_test1); SetGO io_gout_num,d_num_test1; ELSE b_num_test1:=1; c_dnum_test1:=BitLShDnum(NumToDnum(b_num_test1),12); e_num_test1:=Abs(a_num_test1); c_dnum_test1:=BitOrDnum(c_dnum_test1,NumToDnum(e_num_test1)); d_num_test1:=DnumToNum(c_dnum_test1); SetGO io_gout_num,d_num_test1; ENDIF 大概這么個意思,只需要一個信號,不需要分正負(fù)兩種信號輸出。但是相當(dāng)于做了個編碼,得在PLC端解碼。 樓主留言:好貼好貼! |
|
---|---|---|
本帖最近評分記錄:
|